4
模拟HTTP POST upload file
source link: https://3wapp.github.io/Python/%E6%A8%A1%E6%8B%9Fhttp-post-upload-file.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
目前仅测试php解析的服务端
PHP: 要确保上传表单的属性是 enctype=”multipart/form-data,必须用POST
1. socket
import socket
boundary = '---------------------------11008921013555437861019615112'
file_content = "hello"
host = '127.0.0.1'
port = 80
file_name = 'file.txt'
file_type = 'text/plain'
req_data = '--{b}\r\n'.format(b=boundary)
req_data += 'Content-Disposition: form-data; name="file"; filename={fn}\r\n'.format(fn=file_name)
req_data += 'Content-Type: {ft}\r\n'.format(ft=file_type)
req_data += '\r\n'
req_data += '{file_content}\r\n'.format(file_content=file_content)
req_data += '--{b}--'.format(b=boundary)
req = 'POST /upload.php HTTP/1.1\r\n'
req += 'Host: {host}\r\n'.format(host=host)
req += 'Content-Type: multipart/form-data; boundary={b}\r\n'.format(b=boundary)
req += 'Content-Length: {l}\r\n'.format(l=len(req_data))
req += 'Connection: close\r\n'
req += '\r\n'
req += '{data}'.format(data=req_data)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.sendall(req)
data = ""
while True:
rcv_data = s.recv(4096)
data += rcv_data
if rcv_data == "":
break
# detect the final chunk
if rcv_data.endswith("0\r\n\r\n"):
break
s.close()
2. urllib
import urllib2
boundary = '%s' % hex(int(time.time() * 1))
fr=open(r'/var/qr/b.png','rb')
file_name = 'file.txt'
file_type = 'text/plain'
data = []
data.append('--%s' % boundary)
data.append('Content-Disposition: form-data; name="file"; filename="%s"' % file_name)
data.append('Content-Type: %s' % file_type)
data.append('--%s--' % boundary)
data.append(fr.read())
fr.close()
http_url='http://127.0.0.1/upload.php'
http_body='\r\n'.join(data)
try:
#buld http request
req=urllib2.Request(http_url, data=http_body)
#header
req.add_header('Content-Type', 'multipart/form-data; boundary=%s' % boundary)
req.add_header('Host', '127.0.0.1')
#post data to server
resp = urllib2.urlopen(req, timeout=5)
#get response
qrcont=resp.read()
print qrcont
except Exception as e:
print '{e}'.format(e=e)
3. requests
import requests
host = '127.0.0.1'
url = 'http://{ip}/upload.php'.format(ip=host)
file_ = '/var/www/file.txt'
response = requests.post(url, files={"name": open(file_, 'rb')})
print(response.text)
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK