Python Mechanize上载图像返回403错误

Python Mechanize上载图像返回403错误,python,python-requests,Python,Python Requests,我试图用mechanize将一张图片上传到ebay-kleinanzeigen.de,但每次我尝试时,都会出现403错误 登录的代码: import mechanicalsoup browser = mechanicalsoup.StatefulBrowser() browser.set_user_agent( 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) C

我试图用mechanize将一张图片上传到ebay-kleinanzeigen.de,但每次我尝试时,都会出现403错误

登录的代码:

import mechanicalsoup

browser = mechanicalsoup.StatefulBrowser()
browser.set_user_agent(
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36')

a = browser.open('https://www.ebay-kleinanzeigen.de/m-einloggen.html')
browser.select_form('#login-form')
# browser.get_current_form().print_summary()
browser['loginMail'] = 'testaccount@8.dnsabr.com'
browser['password'] = 'testaccount'
browser.submit_selected()
选择要在其中列出产品的类别:

response = browser.open(
    'https://www.ebay-kleinanzeigen.de/p-anzeige-aufgeben.html#?path=161/173/motorola_handy&isParent=false')
crsf = response.soup.find('input', {'name': '_csrf'})['value']

payload_select_category = {"_csrf": crsf,
                           "parentCategoryId": "210",
                           "categoryId": "223",
                           "attributeMap[autoteile_reifen.art_s]": "ersatz_reparaturteile"}

response = browser.post('https://www.ebay-kleinanzeigen.de/p-anzeige-aufgeben-schritt2.html', payload_select_category)
上载图像:

img_file = open(r'C:/Users/Oli/Google Drive/IMG_20190616_153432.jpg', 'rb')

payload_img_upload = {'name': 'Image.jpg'}

file = {'name': 'Image.jpg',
        'file': ('Image.jpg', img_file, 'image/jpeg')}

response = browser.post('https://www.ebay-kleinanzeigen.de/p-bild-hochladen.html', payload_img_upload, files=file)
顺便说一下,我在这里提供的登录数据正常工作。

尝试使用以下代码:

header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
header['content-type'] = 'text/html'

base_url = 'https://www.ebay-kleinanzeigen.de/'

session = requests.session()
res = BeautifulSoup(session.get(f'{base_url}m-einloggen.html').content, 'lxml')
csrf_token = res.find('input', {'name': '_csrf'})['value']
print(f'Found token: {csrf_token}')

payload = dict()
payload['targetUrl'] = '/'
payload['loginMail'] = 'testaccount@8.dnsabr.com'
payload['password'] = 'testaccount'
payload['_csrf'] = csrf_token
payload['fingerprint'] = '4dd6ba9367ddc34f0b00cf9566e01b63'

res = session.post(f'{base_url}m-einloggen.html', data=payload, allow_redirects=True)
print(f'Logged in: {res.status_code}')

img_file = open(r'C:/Users/Oli/Google Drive/IMG_20190616_153432.jpg', 'rb')
files = {'name': 'TestImg.jpg', 'file': ('TestImg.jpg', img_file, 'image/jpeg', {'Expires': '10'})}

header['content-type'] = 'multipart/form-data; boundary=----moxieboundary1563218428568'
header['x-csrf-token'] = csrf_token
res = session.post(f'{base_url}p-bild-hochladen.html',headers = header, files=files)
print(f'Image uploaded: {res.status_code}')
此外,还有这种编码。图片是以某种编码方式上传的,你能告诉我这是哪种编码吗。我认为这就是问题所在:


.

谢谢你的帮助,尼廷!回复显示我现在有200个,但内容中有一条错误消息,用德语告诉我不应该选择空图像。我没有检查。如果我找到任何解决方案,我会告诉你的。我不知道是哪种编码。Base64也是错误的,我希望我能找到正确的编码。我很确定它是:ISO 8859-9,但我不知道如何将图像编码为这种编码