4

こうなると困ります…

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')

ブラウザではすべてが完全に機能しますが、私のスクリプトはそうではありません。スクリプトが正しい結果を返す場合もあります。他の本を手に入れることもあれば、何も手に入れないこともあります。他の本を取得すると、これらの本は通常、最近他の人によって検索されます。

4

1 に答える 1

2

を実行するように変更されたコードを次に示しますmultipart/form-data。これは機能しませんでしたが、あなたの URL に対して私の PC でテストしたところ、機能させる前にハッキングが必要になる可能性があります (記号が正しくないか何かである可能性があります)。

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.
于 2012-06-20T07:39:40.570 に答える