how to read the response which is a sound file in python? - python

I am sending a request to the server and server is sending a response back. But the response is in the form of sound file.
working - I am sending the request, response is received on the terminal, so I am writing it to text but later how to convert that into a sound file (.wav). The response from the server is as shown below.
The response as a text in the beginning and the binary in the middle and later text in the end. how to get a sound file out of it ? someone help me in this ?

Related

python flask sending raw http response with jpeg encoded image

I'm trying to send raw response (which is a jpeg image from my laptop camera) in python using flask, this is the particular snippet:
#app.route("/")
def stream():
frm = imencode('.jpg',cap.read()[1])[1].tobytes()
resp = Response()
resp.set_data(value="HTTP/1.1 200 Ok\nContent-Type:image/jpeg\nContent-Length:"+str(len(frm))+"\n\n"+str(frm))
return resp
My browser seem to display it as text nonetheless. If initialize
Response(frm.tobytes(), headers={"Content-Type":"image/jpeg"})
then then browser decodes the image ok. I'm not very good with web stuff, but from what I've found so far response consists of first line specifying the http version, response status code and respective message. Then come the header fields each on new line. then a clean line separates metadata from the body. I've read that the bare minimum for a simple response are Content-Type and Content-Length headers. Some sources also mention using \r in combination with \n to separate the lines but i didn't find the example so far and this source didn't specify where exactly \r should be added.

How can I display/save an xlsx file that I received from a server with http requests in python?

I am building an application where data is sent to a server, the server creates an xlsx (excel) file with that data and returns that file to the client where at the end I want it to be displayed
Im using flask and the creation of the file itself with the data from the client works and the file is saved locally in the same folder. I tried several things but I cant seem to check wether the file was sent back correctly because I dont exactly know how to work with it on the client side. Currently I try sending the file back as following:
return send_file("my_file.xlsx", as_attachment=True)
and I also tried
return send_file("absolute/path/to/my_file", as_attachment=True)
On the client side I also tried all kind of things and Im currently at
print(r.content)
which prints tons of characters, backslashes etc..
and where r is
r = requests.get('http://127.0.0.1:5000/', params = {...})
So two problems:
I dont know if the file is correctly sent from the server, how can I check?
Probably answers the first one: How can I display or save the file on the client side?
The file is created with xlsxwriter and I dont get any error messages. Return status also is 200 so I guess my problem is opening the file on the client side. But if anybody has advice I would be really happy to hear!
Edit: File was sent correctly, the answer was:
r = requests.get('http://127.0.0.1:5000/', params = {...})
def save_xl(r):
with open('file.xlsx', 'wb') as f:
f.write(r.content)
save_xl(r)
And the file was create successfully
you can try saving the content of the request as a xlsx file.
r = requests.get('http://127.0.0.1:5000/', params = {...})
def save_xl(r):
with open('file.xlsx', 'wb') as f:
f.write(r.content)
save_xl(r)

How can I send a playable part of a .mp4 in flask without range headers

Lets say i have this endpoint in flask.
#app.route('/video.mp4', methods=['GET'])
def video_send():
return flask.send_file('video.mp4')
This sends the video file raw with a 200 status. The client thats making this request does not support range byte requests with 206 statuses. However, i can still make a request to the endpoint with some url parameter such as /video.mp4?skip_bytes=50000. The video file was encoded with handbrake and "web optimizations" where enabled. Is it possible to be able to send a certain range of bytes of that file and still have it be completely playable?

Write to a file on a server using python

I want to write some data, e.g. "hello" on a file that is located on a remote server, not a local server. This is the code that I used to read from server:
import urllib2
var = "hello"
url = "http://url:port/log/log.txt"
response = urllib2.urlopen(url)
txt = response.read();
print txt
As an output I was able to get the data from the log file.
Now I want to write some data, e.g. "hello" onto the same file. How to achieve that?
What your code is doing is actually not "reading a file" but sending an HTTP get request to a given url and print the HTTP response's body. What you get as content for this url is up to the HTTP server serving this url, and the fact it actually comes from a file stored on this server is totally irrelevant - it might as well come from a database, from another web server, or be typed in real time by a monkey FWIW.
If you want to use the HTTP protocol to modify the content of a given file on this server, the server must provide this service (as a given url where you're supposed to send a POST or PUT http request with the new content).

How python flask server send back response with XML file

I coded a mock server, after I got a POST message with XML file, I need send back a response message with XML file also.
I found some example as below to send back response with XML content. But I think it's not a file. Anyone has idea on sending back response with a file?
result = open('output.xml', 'r').read()
r = Response(response=result, status=200, mimetype="application/xml")

Categories

Resources