如何在python中发送此http请求?

时间:2017-11-20 15:31:05

标签: python api curl python-requests

我想通过python请求在python中发出这个请求:

curl -X POST \
  --form fileItems[0].fileToUpload=@"/path/to/file.mp4"  \
  --form fileItems[0].path="/something/"    \
  --form fileItems[0].replacing=false  \
  --form fileItems[1].fileToUpload=@"/path/to/file.mp4"  \
  --form fileItems[1].path="/something/"    \
  --form fileItems[1].replacing=false  \
someurl.com/files/

python中的等价物是什么? 我写了这个:

files = {'fileItems[0].fileToUpload': open('/path/to/file.mp4', 'rb'),
     'fileItems[0].path': '/medias/videos/comedian_contest/', 'fileItems[0].replacing': False}
response = requests.post(url='http://storage.backtory.com/files', files=files, headers=headers)

但是我收到了这个错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3/dist-packages/requests/api.py", line 107, in post
return request('post', url, data=data, json=json, **kwargs)
File "/usr/lib/python3/dist-packages/requests/api.py", line 53, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 454, in request
prep = self.prepare_request(req)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 388, in prepare_request
hooks=merge_hooks(request.hooks, self.hooks),
File "/usr/lib/python3/dist-packages/requests/models.py", line 296, in prepare
self.prepare_body(data, files, json)
File "/usr/lib/python3/dist-packages/requests/models.py", line 447, in prepare_body
(body, content_type) = self._encode_files(files, data)
File "/usr/lib/python3/dist-packages/requests/models.py", line 150, in _encode_files
fdata = fp.read()
AttributeError: 'bool' object has no attribute 'read'

2 个答案:

答案 0 :(得分:0)

我自己解决了。事实证明, - form发送request.files中的文件和post参数中的其他参数。所以相应的上述curl函数将是:

headers = {'Authorization': auth_header, 'some_header': header }
files = {"fileItems[0].fileToUpload": open(file_path, 'rb')}
response = requests.post(url='http://some_url.com/some_path', files=files, headers=headers,
                         data={'fileItems[0].path': ["/some_path/path/path/"],
                               'fileItems[0].replacing': [False], })

我创建了一个用于测试的Web服务器并对其执行了curl请求,并找出了请求的格式应该是什么。

我在这里留下这个答案,以防将来有人遇到同样的问题。

答案 1 :(得分:-2)

第一个导入请求模块,用于python执行HTTP请求和beautifulsoup来解析数据。

import requests
from bs4 import BeautifulSoup

class Cralwer():
    def __init__(self):
        self.agent = requests

    def get_page(self,link):
            page = self.agent.get(link).content
            self.page_processor(page)
            break

    def page_processor(self,content):
        print content
        soup = BeautifulSoup(content,'html.parser')
        for jobs in soup.find_all(attrs={"whatever the attribute"}):
                   //DO WHAT EVER YOU WHAT TO DO

get_page(link)

它会使用网址调用 get_page ,它将转到该链接,内容将转到 page_processor 。页面处理器将使用beautifulSoup解析内容。

我们可以使用GET和POST两种方法 例如 GET:

page = self.agent.get(link).content

POST:

post_params = {'roll': '1','address':'mumbai'}   
page = self.agent.post(link, files=post_params)