我在Ubuntu 12.10上使用OpenSSL 1.0.1c,python 2.7.3,请求 1.0.3和1.0.4(尝试过两者),并尝试使用以下代码连接到url变量中的网站.
def SendInitialRequest(xmlmessage, redirecturl):
url = 'https://centineltest.cardinalcommerce.com/maps/txns.asp'
payload = 'cmpi_msg=' + ET.tostring(xmlmessage)
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
}
r = requests.post(url, data=payload, headers=headers, verify=None)
print r.text
Run Code Online (Sandbox Code Playgroud)
它会引发以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "clams/libs/centinel/thinclient.py", line 134, in SendInitialRequest
r = requests.post(url, data=payload, headers=headers, verify=None)
File "/home/jasonamyers/.virtualenv/clams/lib/python2.7/site-packages/requests/api.py", line 87, in post
return request('post', url, data=data, **kwargs)
File "/home/jasonamyers/.virtualenv/clams/lib/python2.7/site-packages/requests/api.py", line 44, in request
return session.request(method=method, url=url, **kwargs)
File "/home/jasonamyers/.virtualenv/clams/lib/python2.7/site-packages/requests/sessions.py", line 269, …Run Code Online (Sandbox Code Playgroud) 我正在使用请求与django应用程序通信但是
当我尝试
requests.get('https://mysite.com', verify=True)
Run Code Online (Sandbox Code Playgroud)
我收到错误:
主机名'mysite.com'与'*.myhost.com','myhost.com'不匹配
但是,当我查看浏览器或http://www.digicert.com/help/时,证书看起来很精致和花花公子.
我的主持人建议缺少SNI支持请求(Github似乎确认https://github.com/kennethreitz/requests/issues/749).有没有人找到使用请求的解决方法?
我正在编写一个使用Kenneth Reitz的请求库执行REST操作的应用程序,我正在努力寻找一种单独测试这些应用程序的好方法,因为请求通过模块级方法提供其方法.
我想要的是能够综合双方之间的对话; 提供一系列请求断言和响应.
我正在尝试导入requests模块,但是我得到了这个错误,我的python版本是在ubuntu 14.04上运行的3.4
>>> import requests
Traceback (most recent call last):
File "/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/connectionpool.py", line 10, in <module>
from queue import LifoQueue, Empty, Full
ImportError: cannot import name 'LifoQueue'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.4/dist-packages/requests/__init__.py", line 58, in <module>
from . import utils
File "/usr/local/lib/python3.4/dist-packages/requests/utils.py", line 26, in <module>
from .compat import parse_http_list as _parse_list_header
File "/usr/local/lib/python3.4/dist-packages/requests/compat.py", line 7, in <module>
from .packages import …Run Code Online (Sandbox Code Playgroud) import requests
data = {'foo':'bar'}
url = 'https://foo.com/bar'
r = requests.post(url, data=data)
Run Code Online (Sandbox Code Playgroud)
如果URL使用自签名证书,则会失败
requests.exceptions.SSLError: [Errno 1] _ssl.c:507: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Run Code Online (Sandbox Code Playgroud)
我知道我可以传递False给verify参数,如下所示:
r = requests.post(url, data=data, verify=False)
Run Code Online (Sandbox Code Playgroud)
但是,我想要做的是将请求指向磁盘上的公钥副本,并告诉它信任该证书.
在HTTP协议中,您可以使用keep-alive在一个套接字中发送许多请求,然后立即从服务器接收响应,这样可以显着加快整个过程.有没有办法在python请求lib中执行此操作?或者有没有其他方法可以使用请求lib加快速度?
我正在学习Django 1.6.
我想使用HTTP POST请求发布一些JSON,我正在使用Django来完成此任务的学习.
我试图用request.POST['data'],request.raw_post_data,request.body但都不是为我工作.
我的views.py是
import json
from django.http import StreamingHttpResponse
def main_page(request):
if request.method=='POST':
received_json_data=json.loads(request.POST['data'])
#received_json_data=json.loads(request.body)
return StreamingHttpResponse('it was post request: '+str(received_json_data))
return StreamingHttpResponse('it was GET request')
Run Code Online (Sandbox Code Playgroud)
我使用请求模块发布JSON数据.
import requests
import json
url = "http://localhost:8000"
data = {'data':[{'key1':'val1'}, {'key2':'val2'}]}
headers = {'content-type': 'application/json'}
r=requests.post(url, data=json.dumps(data), headers=headers)
r.text
Run Code Online (Sandbox Code Playgroud)
r.text应打印该消息并发布数据,但我无法解决这个简单的问题.请告诉我如何在Django 1.6中收集发布的数据?
环境:Python 3.6.3请求2.18.4 PyCharm 2018.1
在正常运行中使用上述配置时一切都很好.但是,当使用PyCharm调试器时,我的输出不断给出两种例外:
Exception ignored in: <generator object urlsplit.<locals>.<genexpr> at 0x7f69803940a0>
Traceback (most recent call last):
File "/usr/lib/python3.6/urllib/parse.py", line 433, in <genexpr>
if not rest or any(c not in '0123456789' for c in rest):
Run Code Online (Sandbox Code Playgroud)
要么
SystemError: error return without exception set
Exception ignored in: <generator object iter_slices at 0x7f69803940f8>
Traceback (most recent call last):
File "/home/damian/workspace/DofusV2/venv/lib/python3.6/site-packages/requests/utils.py", line 449, in iter_slices
def iter_slices(string, slice_length):
`
Run Code Online (Sandbox Code Playgroud)
这不是单个项目中的问题,我在无数个项目中无数次地遇到过这个问题.但是,每个项目都是多线程的(我不知道这是否有任何区别)事情是我没有使用调试器时没有这个问题加上它没有真正做任何事情,应用程序是稳定的并且工作正常.我的问题是为什么会发生这种情况,我能否至少压制它以免污染我的日志?
我想certification validation在使用内部企业链接向服务器发出请求时忽略它.
使用python requests库我会这样做:
r = requests.get(link, allow_redirects=False,verify=False)
Run Code Online (Sandbox Code Playgroud)
如何使用urllib2库进行相同的操作?
如果我使用请求库向网页发出GET请求,如何更改引用者.我浏览了整本手册但找不到它.
python-requests ×10
python ×9
python-2.7 ×2
ssl ×2
django ×1
django-views ×1
http ×1
http-post ×1
httprequest ×1
mocking ×1
openssl ×1
pycharm ×1
python-3.x ×1
referer ×1
sni ×1
testing ×1
ubuntu-12.10 ×1
unit-testing ×1
urllib2 ×1