这是您修改后的代码以执行multipart/form-data
. 虽然这不起作用,但当我在我的电脑上针对您的 URL 进行测试时,它可能需要一些黑客攻击(可能是标志不正确或其他什么)才能让它工作。
import mimetypes
import string
import random
import time
import md5
import httplib
def upload(fields,files):
boundaryChars = list(string.lowercase) + list(string.uppercase) + \
[str(x) for x in range(10)] + ['_'*10]
random.shuffle(boundaryChars)
boundary = '----------RaNdOm_crAPP'+''.join(boundaryChars[:20])
CRLF = '\r\n'
elem = []
for key in fields:
elem.append('--' + boundary)
elem.append('Content-Disposition: form-data; name="%s"' % key)
elem.append('')
elem.append(fields[key])
for (key, filename,value) in files:
elem.append('--' + boundary)
elem.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, filename))
elem.append('Content-Type: %s' % mimetypes.guess_type(filename)[0] or \
'application/octet-stream')
elem.append('')
elem.append(value)
elem.append('--' + boundary + '--')
elem.append('')
body = CRLF.join(elem)
content_type = 'multipart/form-data; boundary=%s' % boundary
return content_type, body
def search_img(item, image_name):
try:
f = open(image_name, 'rb')
img = f.read()
except IOError, e:
print 'fail to open %s' % image_name
print e
return None
ts = str(time.time())
m = md5.new('testsearch_by_image' + item)
m.update(ts)
m.update('0123456789')
sign = m.hexdigest()
#params = urllib.urlencode( )
contentType,body = upload({
'item': item,
'app_key': 'test',
'cmd':'search_by_image',
'sign':sign,
#'img_file':img,
'extra':'',
'time_stamp':ts,
},
[('img_file', image_name, img)]
)
headers = {
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Content-type': contentType,
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5',
'Host':'i.joyton.com:2010',
'Origin':'http://i.joyton.com:2010',
'Referer':'http://i.joyton.com:2010/'
}
#print c
#print body
conn = httplib.HTTPConnection('i.joyton.com', 2010)
conn.request('POST', '/', body, headers)
response = conn.getresponse()
print response.status, response.reason
print response.read()
conn.close()
return response.read()
if __name__ == '__main__':
search_img('book', 'iMgXS.jpg') #the same image.