如何编写python脚本以使用http

时间:2019-06-24 11:56:06

标签: python http post

我很想编写一个Python脚本来与具有http的远程Web服务器进行交互。这是服务器(名称:用户名;密码:passw0rd),基本上,我将需要将图像上传到远程服务器,并打印出其分析输出。

我对Python网络编程的知识几乎为零,而且真的不知道如何解决。谁能阐明我应该从哪里开始编写这样的脚本?我可以从chrome找到以下http post请求,但不知道如何继续进行操作:

POST /post HTTP/1.1
Host: 34.65.71.65
Connection: keep-alive
Content-Length: 3185
Cache-Control: max-age=0
Authorization: Basic dXNlcm5hbWU6cGFzc3cwcmQ=
Origin: http://34.65.71.65
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryUPXn3eOKoasOQMwW
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Referer: http://34.65.71.65/post
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7

这是我现在正在编写的Python脚本:


import requests

# defining the api-endpoint
API_ENDPOINT = "http://34.65.71.65/post"

# your API key here
username = "username"
pwd = "passw0rd"

path = "./kite.png"
image_path = path
# Read the image into a byte array
image_data = open(image_path, "rb").read()

# data to be sent to api
data = image_data

# sending post request and saving response as response object
# r = requests.post(url = API_ENDPOINT, auth=(username, pwd), data = data)
r = requests.post(url = API_ENDPOINT, auth=(username, pwd), data = data)

# extracting response text
pastebin_url = r.text
print("The pastebin URL is:%s"%pastebin_url)

但是以某种方式触发了以下问题:


requests.exceptions.ConnectionError: ('Connection aborted.', BrokenPipeError(32, 'Broken pipe'))

这是另一个审判:

import requests

# defining the api-endpoint
API_ENDPOINT = "http://34.65.71.65/post"

# your API key here
username = "username"
pwd = "passw0rd"

path = "./kite.png"

with open(path, 'rb') as file:
    body = {'foo': 'bar'}
    body_file = {'file_field': file}
    response = requests.post(API_ENDPOINT, auth=(username, pwd), data=body, files=body_file)
    print(response.content) # Prints result

1 个答案:

答案 0 :(得分:1)

由于使用了请求API,使用Python进行HTTP请求非常容易。上载文件要求您先阅读它,然后再将其上载到POST请求的正文中。

断开的PIPE错误通常发生在服务器在客户端可以发送所有数据之前关闭连接时。这通常是由于标头中声明的内容大小与实际内容大小之间不一致。要解决此问题,您应该将文件读取为“ r”或“ rb”(如果是二进制文件),并使用请求API文件kwargs发送该文件。

import requests

with open(file.name, 'rb') as file:
      body = {'foo': 'bar'}
      body_file = {'file_field': file}
      response = requests.post('your.url.example', data=body, files=body_file)
      print(response.content) # Prints result