我这样做很麻烦……
您可能希望得到与http://i.joyton.com:2010相同的结果
使用此图像.和其他参数保持默认值.
def search_img(item, image_name):
try:
f = open(image_name, 'rb')
img = f.read()
print type(img)
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( {
'item': item,
'app_key': 'test',
'cmd':'search_by_image',
'sign':sign,
'img_file':img,
'extra':'',
'time_stamp':ts,
})
headers = {'Content-type': 'application/x-www-form-urlencode',
'Accept': 'text/plain'}
conn = httplib.HTTPConnection('i.joyton.com', 2010)
conn.request('POST', '', params, headers)
response = conn.getresponse()
print response.status, response.reason
print response.read()
conn.close()
return response.read()
if __name__ == '__main__':
search_img('book', 'f:\\book_001.jpg')
在浏览器中一切都很完美,但我的脚本却没有.有时脚本会返回正确的结果;有时它会得到其他书籍,有时它什么都没有.当它获得其他书籍时,这些书籍最近经常被其他人搜索.
解决方法:
以下是您修改的代码,用于执行multipart / form-data.虽然这不起作用,但当我在我的PC上测试你的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.
标签:python,http,post 来源: https://codeday.me/bug/20190704/1375428.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。