是否可以在不破坏连接的情况下使用python httplib来放置多个请求?比如,我可以将一个大文件部分上传到服务器,但是在一个套接字连接中.
我寻找答案.但似乎没有什么是如此清晰明确.
任何示例/相关链接都会有所帮助.谢谢.
conn = httplib.HTTPConnection('thesite')
conn.request("GET","myurl")
conn.putheader('Connection','Keep-Alive')
#conn.putheader('User-Agent','Mozilla/5.0(Windows; u; windows NT 6.1;en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome//5.0.375.126 Safari//5.33.4')
#conn.putheader('Accept-Encoding','gzip,deflate,sdch')
#conn.putheader('Accept-Language','en-US,en;q=0.8')
#conn.putheader('Accept-Charset','ISO-8859-1,utf-8;1=0.7,*;q=0.3')
conn.endheaders()
r1= conn.getresponse()
Run Code Online (Sandbox Code Playgroud)
它引发了一个错误:
conn.putheader('Connection','Keep-Alive')
File "D:\Program Files\python\lib\httplib.py", line 891, in putheader
raise CannotSendHeader()
Run Code Online (Sandbox Code Playgroud)
如果我注释掉putheader和endheaders,它运行良好.但我需要它保持活力.
有谁知道我做错了什么?
我正在使用肥皂泡0.3.6.创建suds客户端时,我随机收到错误:
httplib.py,_read_status(),第355行,类httplib.BadStatusLine'
以下是用于创建客户端的代码:
imp = Import('http://www.w3.org/2001/XMLSchema')
imp.filter.add('http://tempuri.org/encodedTypes')
imp.filter.add('http://tempuri.org/')
self.doctor = ImportDoctor(imp)
self.client = Client(self.URL,doctor=self.doctor)
Run Code Online (Sandbox Code Playgroud)
这个错误意味着什么,我该如何解决?
谢谢!
我目前正在使用python_flickr_api为我的应用上传照片:它用于httplib执行多部分POST请求.
问题:我想通过拦截POST请求并创建预先成功的响应来验证上传是否真的是在集成测试中发出,这样我的测试就可以完全脱机运行而不依赖于Flickr(我不想上传相同的测试图像100次,或者!)
为此,我尝试使用两个令人难以置信的库:VCRPy和HTTPretty.他们都没有解决我的问题,因为他们都不支持httplib(HTTPretty最接近,httplib2仅支持),我得到一个看起来像这样的错误:
Failure/Error: [Errno 32] Broken pipe
Traceback:
...
File "/usr/local/lib/python2.7/site-packages/flickr_api/upload.py", line 92, in upload
r = post(UPLOAD_URL,auth.AUTH_HANDLER,args,photo_file)
File "/usr/local/lib/python2.7/site-packages/flickr_api/upload.py", line 52, in post
r = multipart.posturl(url,fields,files)
File "/usr/local/lib/python2.7/site-packages/flickr_api/multipart.py", line 19, in posturl
return post_multipart(urlparts[1], urlparts[2], fields,files)
File "/usr/local/lib/python2.7/site-packages/flickr_api/multipart.py", line 33, in post_multipart
h.send(body)
File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 805, in send
self.sock.sendall(data)
File "/usr/local/lib/python2.7/site-packages/httpretty/core.py", line 243, in sendall
return self._true_sendall(data)
File "/usr/local/lib/python2.7/site-packages/httpretty/core.py", line 216, in _true_sendall
self.truesock.sendall(data, *args, …Run Code Online (Sandbox Code Playgroud) 我有以下两个Python脚本,用于尝试弄清楚如何在Python中发送和接收POST请求:
客户端:
import httplib
conn = httplib.HTTPConnection("localhost:8000")
conn.request("POST", "/testurl")
conn.send("clientdata")
response = conn.getresponse()
conn.close()
print(response.read())
Run Code Online (Sandbox Code Playgroud)
服务器:
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
ADDR = "localhost"
PORT = 8000
class RequestHandler(BaseHTTPRequestHandler):
def do_POST(self):
print(self.path)
print(self.rfile.read())
self.send_response(200, "OK")
self.end_headers()
self.wfile.write("serverdata")
httpd = HTTPServer((ADDR, PORT), RequestHandler)
httpd.serve_forever()
Run Code Online (Sandbox Code Playgroud)
问题是服务器挂在self.rfile.read()上,直到在客户端上调用conn.close()为止,但是如果在客户端上调用conn.close(),则客户端无法从服务器接收响应。这就造成了一种情况,要么可以从服务器获得响应,要么可以读取POST数据,但不能两者兼有。我认为这里缺少某些东西可以解决此问题。
附加信息:
conn.getresponse()使客户端挂起,直到从服务器接收到响应为止。在服务器上的功能完成执行之前,似乎没有收到响应。
我正在尝试在tastypie-Django Python应用程序中使用JSON数据执行简单的PUT。但是我通过代码调用时看到401响应错误,但是从终端执行cURL命令时却没有错误。我有代码:
data_to_update = json.dumps({ "NAME" : username,
"type": mytype
})
headers = { "Content-type": "application/json",
"Authorization: ApiKey": '{0}:{1}'.format(username, key)
}
conn = httplib.HTTPConnection('localhost:8000')
conn.set_debuglevel(1)
conn.request('PUT', '/api/v1/table/1/', data_to_update, headers=headers)
response = conn.getresponse()
print response.status, response.reason
conn.close()
Run Code Online (Sandbox Code Playgroud)
我看到输出:
send: u'PUT /api/v1/table/10/ HTTP/1.1\r\nHost: localhost:8000\r\nAccept-Encoding: identity\r\nContent-Length: 148\r\nContent-type: application/json\r\nAuthorization: ApiKey: api:79910a14-a82c-41f9-bb79-458247e6b31a\r\n\r\n{"username": "johnny", "type": "admin_user", "resource_uri": "/api/v1/table/10/"}'
reply: 'HTTP/1.0 401 UNAUTHORIZED\r\n'
header: Date: Fri, 15 Aug 2014 20:07:36 GMT
header: Server: WSGIServer/0.1 Python/2.7.5
header: X-Frame-Options: SAMEORIGIN
header: Content-Type: text/html; charset=utf-8
401 UNAUTHORIZED
Run Code Online (Sandbox Code Playgroud)
但是当我cURL通过终端运行命令时: …
我正在尝试使用HTTPConnection(2.7.8)发出请求,我已将超时设置为10 HTTPConnection(host, timeout=10).但是,HTTPConnection.request()10秒后似乎没有超时.事实上,HTTPConnection.timeout似乎甚至没有被阅读HTTPConnection.request()(它只是通过阅读HTTPConnection.connect().我的理解是正确的吗?timeout只适用于connect()而不是request()吗?有没有办法超时request()?
更新:
我想我已经进一步缩小了这个问题:如果我不提供该方案,它将不会尊重套接字超时.如果提供了该方案,即完整的URL http://google.com:22222,则它会相应地超时.我想知道为什么该计划的存在应该有所作为.也就是说,以下不尊重超时
socket.setdefaulttimeout(3)
conn = HTTPConnection('google.com:22222')
conn.timeout = 3
conn.request('GET', '')
Run Code Online (Sandbox Code Playgroud)
然而,这样做:
socket.setdefaulttimeout(3)
conn = HTTPConnection('http://google.com:22222')
conn.timeout = 3
conn.request('GET', '')
Run Code Online (Sandbox Code Playgroud)
但是,它不会发生在所有域中.
谢谢
我试图得到一个似乎重定向不止一次的页面的最终网址.在浏览器中尝试此示例网址,并将其与我的代码段底部的最终网址进行比较:
这是我运行的测试代码,请注意,获取代码200的最终URL与浏览器中的代码不同.我有什么选择?
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import httplib
>>> from urlparse import urlparse
>>> url = 'http://www.usmc.mil/units/hqmc/'
>>> host = urlparse(url)[1]
>>> req = ''.join(urlparse(url)[2:5])
>>> conn = httplib.HTTPConnection(host)
>>> conn.request('HEAD', req)
>>> resp = conn.getresponse()
>>> print resp.status
301
>>> print resp.msg.dict['location']
http://www.marines.mil/units/hqmc/
>>> url = 'http://www.marines.mil/units/hqmc/'
>>> host = urlparse(url)[1]
>>> req = ''.join(urlparse(url)[2:5])
>>> conn = httplib.HTTPConnection(host)
>>> conn.request('HEAD', …Run Code Online (Sandbox Code Playgroud) conn = httplib.HTTPConnection("www.encodable.com/uploaddemo/")
conn.request("POST", path, chunk, headers)
Run Code Online (Sandbox Code Playgroud)
以上是我想要上传图片的网站"www.encodable.com/uploaddemo/".
我更精通,php所以我无法理解路径和标题的含义.在上面的代码中,chunk是一个由我的图像文件组成的对象.以下代码产生错误,因为我试图在不了解标头和路径的情况下实现.
import httplib
def upload_image_to_url():
filename = '//home//harshit//Desktop//h1.jpg'
f = open(filename, "rb")
chunk = f.read()
f.close()
headers = {
"Content?type": "application/octet?stream",
"Accept": "text/plain"
}
conn = httplib.HTTPConnection("www.encodable.com/uploaddemo/")
conn.request("POST", "/uploaddemo/files/", chunk)
response = conn.getresponse()
remote_file = response.read()
conn.close()
print remote_file
upload_image_to_url()
Run Code Online (Sandbox Code Playgroud) 我迷失了,因为我做错了什么......我现在在网上搜了几个小时,试图重新格式化我的代码,现在我感觉卡住了.
这是我的代码:
import httplib
import json
urlBase = 'amoeba.im'
token = False
username = raw_input('Username? ')
connection = httplib.HTTPConnection(urlBase)
def get(url):
connection.request("GET", url)
response = connection.getresponse()
print response.status, response.reason
print response.read();
if token == False:
token = response.read()
token = token.split('"token":"')[1]
token = token.split('","')[0]
print token
get('/api/login?username=' + username)
get('/api/rooms/join?room=#lobby&token=' + token)
get('/api/postmessage?message=hello%20world&token=' + token)
connection.close()
Run Code Online (Sandbox Code Playgroud)
这是终端输出:
Tyler-Keohanes-MacBook-Pro:~ tylerkeohane$ clear && '/usr/bin/pythonw' '/Users/tylerkeohane/Desktop/chatbot.py'
Username? TgwizBot
200 OK
{"success":true,"username":"TgwizBot","token":"103f6a2809eafb6","users":[{"username":"razerwolf","seen":1338582178260},{"username":"tonynoname","seen":1338582178028},{"username":"arrum","seen":1338582177804},{"username":"Valerio","seen":1338582177504},{"username":"Tgwizman","seen":1338582177258},{"username":"tonynoname2","seen":1338582178004},{"username":"TgwizBot","seen":1338582182219}],"time":1338582182219}
Traceback (most recent call last):
File "/Users/tylerkeohane/Desktop/chatbot.py", line 21, in <module>
get('/api/login?username=' …Run Code Online (Sandbox Code Playgroud) httplib ×10
python ×10
connection ×1
fakeweb ×1
http ×1
http-headers ×1
httprequest ×1
json ×1
mocking ×1
post ×1
soap ×1
suds ×1
tastypie ×1
terminal ×1