标签: python-requests

使用Requests模块Python构建URL

是否可以使用Python的Requests库构建URL?

支持构建查询字符串但是如何构建URL的其余部分.具体来说,我有兴趣使用URL编码的字符串添加到基本URL:

http:// some address.com/api/[term]/

term ='这是一个测试'

http:// some address.com/api/This+is+a+test/

这可能是使用urllib可能的,但似乎在请求中会更好.这个功能是否存在?如果没有,是不是有充分理由不应该?

python python-requests

28
推荐指数
1
解决办法
1万
查看次数

使用python请求的多部分数据POST:未找到多部分边界

我有一个表单数据以及要在同一个POST中发送的文件.例如,{duration:2000,file:test.wav}.我在使用python请求的multipart/form-data发布中看到了很多线程.它们很有用,特别是这个.

我的样例请求如下:

    files = {'file': ('wavfile', open(filename, 'rb'))}
    data = {'duration': duration}
    headers = {'content-type': 'multipart/form-data'}
    r = self.session.post(url, files=files, data=data, headers=headers)
Run Code Online (Sandbox Code Playgroud)

但是当我执行上面的代码时,我收到此错误:

5:59:55.338 Dbg 09900 [DEBUG]解析来自handler [null]的异常:org.springframework.web.multipart.MultipartException:无法解析multipart servlet请求; 嵌套异常是org.apache.commons.fileupload.FileUploadException:请求被拒绝,因为没有找到多部分边界.

所以我的问题是:1)如何查看发送请求的内容?无法使用wireshark,它不在网络上.2)为什么编码数据中缺少边界?我错过了什么,请指出.

python multipartform-data python-requests

27
推荐指数
2
解决办法
2万
查看次数

Python请求中"data"和"params"之间的区别?

我很好奇data参数和请求中的params参数之间的区别是什么python-requests,以及何时应该使用它们.

一个例子是我有一个dicts数组,users=[{"email_hash": "fh7834uifre8houi3f"}, ... ]我尝试用POST(requests.post())

params = {
    "ads_token": blah blah,
    "user_id": blah blah,
    "users": json.dumps(users)  # users=[{"email_hash": "fh7834uifre8houi3f"}, ... ]
    "hash_type": "md5"
}
Run Code Online (Sandbox Code Playgroud)

因为users是几百长,所以得到的字符串json.dumps(users)(以及URL本身也是如此)很长,我得到了错误{'status_code': 414, 'reason': 'Request-URI Too Large'}.这是一个案例,data还是应该遵循一些其他途径?谢谢!

python python-requests

27
推荐指数
1
解决办法
1万
查看次数

在Python请求中获取状态代码的描述

我希望能够输入服务器响应代码并让请求告诉我代码的含义.例如,代码200 - >确定

我找到了源代码的链接,它显示了代码和描述的字典结构.我看到Requests将返回给定描述的响应代码:

print requests.codes.processing  # returns 102
print requests.codes.ok          # returns 200
print requests.codes.not_found   # returns 404
Run Code Online (Sandbox Code Playgroud)

但不是相反:

print requests.codes[200]        # returns None
print requests.codes.viewkeys()  # returns dict_keys([])
print requests.codes.keys()      # returns []
Run Code Online (Sandbox Code Playgroud)

我认为这将是一项例行任务,但似乎无法在在线搜索或文档中找到答案.

python http python-requests

27
推荐指数
3
解决办法
2万
查看次数

使用Python访问Lovoo API

我希望能够使用lovoo API,但不知道如何开始.在运行Charles代理并查看流量后,我得出以下结论:

一旦用户通过应用程序(iPhone)登录,就会发送第一个GETto https://api.lovoo.com/oauth/requestToken?:

    GET /oauth/requestToken? HTTP/1.1
Host    api.lovoo.com
User-Agent  LOVOO/612 (iPhone; iOS 10.2; Scale/3.00)
kissapi-app-idfv    1EC7A8E5-DF16-4E14-8EC9-98DD4772F903
tz  Europe/xxx
kissapi-device-model    iPhone 6s Plus
kissapi-app-version 3.17.0
kissapi-new-oauth   1
kissapi-device  iphone
kissapi-app lovoo
wifi    true
kissapi-adv-id  00000000-0000-0000-0000-000000000000
Connection  keep-alive
kissapi-app-id  7F947A460DAFCA88556B2F35A6D78A3E
Authorization   OAuth oauth_callback="oob", oauth_consumer_key="an.email%40gmail.com", oauth_nonce="A32CCA91-FB7A-4AA3-8314-0A9A6E67045E", oauth_signature="Sq8KTg%2FhVIGBaWgWXprPluczOs4%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1487017515", oauth_version="1.0"
Accept-Language en-CH;q=1, de-CH;q=0.9
kissapi-adv-on  false
kissapi-version 1.20.0
kissapi-update-user-hash    6ea2bd15ea41d0dc8c2615589e2d52ec
Accept  */*
kissapi-device-os   10.2
Accept-Encoding gzip, deflate
kissapi-sync-enabled    1
Run Code Online (Sandbox Code Playgroud)

这也给出了以下标记: oauth_token=44d83e8ef50f&oauth_token_secret=37998f6c6ef2e618

这是跟其他GET到https://api.lovoo.com/oauth/accessToken?:

GET /oauth/accessToken? HTTP/1.1
Host …
Run Code Online (Sandbox Code Playgroud)

oauth python-3.x python-requests

27
推荐指数
1
解决办法
1663
查看次数

RequestsDependencyWarning:urllib3(1.9.1)或chardet(2.3.0)与支持的版本不匹配

我找到了几个关于这个问题的网页,但没有一个解决了我的问题.

即使我做了:

pip show
Run Code Online (Sandbox Code Playgroud)

我明白了:

/usr/local/lib/python2.7/dist-packages/requests/__init__.py:80: RequestsDependencyWarning: urllib3 (1.9.1) or chardet (2.3.0) doesn't match a supported version!
  RequestsDependencyWarning)
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    load_entry_point('pip==1.5.6', 'console_scripts', 'pip')()
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 480, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2691, in load_entry_point
    return ep.load()
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2322, in load
    return self.resolve()
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2328, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 74, in <module>
    from pip.vcs import git, mercurial, subversion, …
Run Code Online (Sandbox Code Playgroud)

python pip urllib3 chardet python-requests

27
推荐指数
10
解决办法
3万
查看次数

Python请求和Unicode

我正在使用请求库来查询Diffbot API以从网页URL获取文章的内容.当我访问我在浏览器中创建的请求URL时,它返回一个带有Unicode文本的JSON对象(对吗?)(例如我稍微缩短了文本):

{"icon":"http://mexico.cnn.com/images/ico_mobile.jpg","text":"CIUDADDEMÉXICO(CNNMéxico)\ u2014 Kassandra Guazo Cano tiene32años,pero estedomingopastópriprimera vez enunaelección.\n \"没有habíasacadomi(credencial del)IFE(Instituto Federal Electoral)porque al hacereltrámitehairmucha mofa cuando ven que tu nombre no conide con tu y otros documentos de acuerdo con su nueva identidad. nSánchez骰子阙洛杉矶solicitantes没有儿子discriminados,佩罗拉experiencia德Kassanda ES diferente:\"干草阙丹戎巴葛未licenciado,DOS peritos(恩特雷里奥斯埃勒斯未endocrinólogo)Además,EL juez格言sentencia第下午坎比奥德农布雷Ÿ州市没有上课有利tienes阙esperar OTROS夸A号段御宇一个demandar人registro民事\ "\南特ESTAsituación,报理事会全国第PrevenirŸEliminar LA sculina,洛杉矶transgéneroVOTAN - 墨西哥:博托2012 - 全国", "URL":"HTTP:/ /mexico.cnn.com/nacional/2012/07/02/con-apariencia-de-mujer-e-identidad-masculina-los-transexuales-votan ", "的xpath": "/ HTML [1]/BODY [1]/SECTION [5]/DIV [1]/ARTICLE [1]/DIV [1]/DIV [6]"}

当我使用python请求库时,如下所示:

def get_article(self, params={}):
  api_endpoint = 'http://www.diffbot.com/api/article'
  params.update({
    'token': self.dev_token,
    'format': self.output_format,
  })
  req = requests.get(api_endpoint, params=params)
  return …
Run Code Online (Sandbox Code Playgroud)

python unicode python-requests

26
推荐指数
2
解决办法
4万
查看次数

如何从python请求模块构造curl命令?

Python请求是一个很好的模块,可以简化我的Web REST API访问编程,我通常会在下面做

import json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
headers = {'Content-type': 'application/json', 'Accept': 'application/json'}

r = requests.post(url, data=json.dumps(payload), headers=headers)
Run Code Online (Sandbox Code Playgroud)

当出现错误时,我想看看它背后发生了什么.构造curl命令以在命令行中重现是常见的方法,因为这是RESP API文档中最常描述的标准方法

try:
    r = requests.post(url, data=json.dumps(payload), headers=headers)
except Exception as ex:
    print "try to use curl command below to reproduce"
    print curl_request(url,"POST",headers,payload)
Run Code Online (Sandbox Code Playgroud)

我可以curl为这个请求生成命令示例,在libcloud的调试中看到很好的例子,我找不到一个简单的构造方法,下面是我想要自己创建的方法.

# below code is just pseudo code, not correct 
def curl_request(url,method,headers,payloads):
    # construct curl sample from requests' structure
    # $ curl -v -H "Accept: application/json" -H …
Run Code Online (Sandbox Code Playgroud)

python-requests

26
推荐指数
2
解决办法
2万
查看次数

python请求 - 在HTTP请求中POST不带文件名的Multipart/form-data

我试图使用python中的请求模块复制以下POST请求:

POST /example/asdfas HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------241652170216373
Content-Length: 279

-----------------------------241652170216373
Content-Disposition: form-data; name="value_1"

12345
-----------------------------241652170216373
Content-Disposition: form-data; name="value_2"

67890
-----------------------------241652170216373--
Run Code Online (Sandbox Code Playgroud)

请求文档建议应使用files参数.

当我尝试以下呼叫时:

import requests
requests.post('http://example.com/example/asdfas', files={'value_1': '12345', 
                                                          'value_2': '67890'})
Run Code Online (Sandbox Code Playgroud)

我收到以下HTTP请求:

'Accept': '*/*', 
'Accept-Encoding': 'gzip, deflate, compress', 
'Content-Length': '264', 
'User-Agent': 'python-requests/2.2.1 CPython/3.3.2 Windows/7', 
'Content-Type': 'multipart/form-data; boundary=273f13699c02429db4eb95c97f757d38'
--273f13699c02429db4eb95c97f757d38
Content-Disposition: form-data; name="value_1"; filename="value_1"

12345
--273f13699c02429db4eb95c97f757d38
Content-Disposition: form-data; name="value_2"; filename="value_2"

67890
--273f13699c02429db4eb95c97f757d38--
Run Code Online (Sandbox Code Playgroud)

我也试过使用data参数: …

python http python-requests

26
推荐指数
1
解决办法
3万
查看次数

无法捕获模拟异常,因为它不继承BaseException

我正在开发一个涉及连接到远程服务器,等待响应,然后根据该响应执行操作的项目.我们捕获了几个不同的异常,并且根据捕获的异常而表现不同.例如:

def myMethod(address, timeout=20):
    try:
        response = requests.head(address, timeout=timeout)
    except requests.exceptions.Timeout:
        # do something special
    except requests.exceptions.ConnectionError:
        # do something special
    except requests.exceptions.HTTPError:
        # do something special
    else:
        if response.status_code != requests.codes.ok:
            # do something special
        return successfulConnection.SUCCESS
Run Code Online (Sandbox Code Playgroud)

为了测试这个,我们编写了如下测试

class TestMyMethod(unittest.TestCase):

    def test_good_connection(self):
        config = {
            'head.return_value': type('MockResponse', (), {'status_code': requests.codes.ok}),
            'codes.ok': requests.codes.ok
        }
        with mock.patch('path.to.my.package.requests', **config):
            self.assertEqual(
                mypackage.myMethod('some_address',
                mypackage.successfulConnection.SUCCESS
            )

    def test_bad_connection(self):
        config = {
            'head.side_effect': requests.exceptions.ConnectionError,
            'requests.exceptions.ConnectionError': requests.exceptions.ConnectionError
        }
        with mock.patch('path.to.my.package.requests', **config):
            self.assertEqual(
                mypackage.myMethod('some_address',
                mypackage.successfulConnection.FAILURE
            )
Run Code Online (Sandbox Code Playgroud)

如果我直接运行该函数,一切都按预期发生.我甚raise …

python exception-handling python-mock python-3.3 python-requests

26
推荐指数
2
解决办法
2万
查看次数