相同的请求在Fiddler中有效,但在Requets中无效

时间:2018-07-23 10:44:50

标签: python http python-requests instagram

我正在尝试使用请求从Python编辑我的Instagram简历。我可以轻松登录并按照/ etc进行操作,但是我只能编辑个人资料。我一直收到403错误或400错误。当我漂亮地打印我的Python原始请求时,它看起来像这样(这些是我的虚拟帐户的Cookie):

df = pd.read_excel("practice1.xlsx",sheet_name=0)

以及我的POST数据的正文:

POST https://www.instagram.com/accounts/edit/
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 
Firefox/58.0
Accept-Encoding: gzip, deflate, br
Accept: */*
Connection: keep-alive
Host: www.instagram.com
Content-Length: 131
Origin: https://www.instagram.com
Content-Type: application/x-www-form-urlencoded
X-Requested-With: XMLHttpRequest
X-CSRFToken: buJOTJT8lR2XcTL6WU5G9Rviq3mjmhaa
X-Instagram-AJAX: 314b21580dde
DNT: 1
Referer: https://www.instagram.com/accounts/edit/
Accept-Language: et-EE,et;q=0.9,en-US;q=0.8,en;q=0.7,ar;q=0.6
Cookie: mid=W1WlVQALAAEfLNtIlXn2CtR3XAUF; ig_cb=1; mcd=3; 
ds_user_id=8271265936; 
sessionid=IGSCad223c2888974f0472cea36f3
16b1d3caab2feaa3bf519fa3652da183dca2446%3 
ARItc316HmDIUvwjI8BOJCzyvuFkHbeXd%3A%7B%
22_auth_user_id%22%3A8271265936%2C%22_aut 
h_user_backend%22%3A%22accounts.backends.
CaseInsensitiveModelBackend%22%2C%22_auth_user_hash%
22%3A%22%22%2C%22_platform%
22%3A4%2C%22_token_ver%22%3A2%2C%22_tok
en%22%3A%228271265936%3AXMCx3bjvUtWEy3A37
cDnQiQ9ysQBaGw9%3A5aaef5c33915c937439a14292
048d8ae0555d5bf949befcd5a9a8a209808e7c9%22%2C%22
last_refreshed%22%3A1532306445.48 
36139679%7D; rur=PRN; urlgen="{"time": 1532295222, "88.196.120.23": 3249, 
"2001:7d0:8b1b:d80:59ac:b6fd:fc77:754f": 
3249}:1fhOwz:lMzBvH8bTYwoOqWauglUMXbkGCU

当我通过提琴手发送此确切请求时,我得到200,但通过Python我得到403或400。我尝试将数据作为原始字符串和字典发送,但均返回错误。

代码:

 first_name=888&email=ml162uju%40email.org&
 username=6relvwyv&phone_number=&gender=1&biography
 =&external_url=&chaining_enabled=on400

1 个答案:

答案 0 :(得分:1)

尝试将cookie以及标头中的cookie传递给请求模块(尝试使用和不使用cookie)

import http.cookies

str_cookies = """mid=W1WlVQALAAEfLNtIlXn2CtR3XAUF; ig_cb=1; mcd=3; ds_user_id=8271265936; sessionid=IGSCad223c2888974f0472cea36f316b1d3caab2feaa3bf519fa3652da183dca2446%3ARItc316HmDIUvwjI8BOJCzyvuFkHbeXd%3A%7B%22_auth_user_id%22%3A8271265936%2C%22_auth_user_backend%22%3A%22accounts.backends.CaseInsensitiveModelBackend%22%2C%22_auth_user_hash%22%3A%22%22%2C%22_platform%22%3A4%2C%22_token_ver%22%3A2%2C%22_token%22%3A%228271265936%3AXMCx3bjvUtWEy3A37cDnQiQ9ysQBaGw9%3A5aaef5c33915c937439a14292048d8ae0555d5bf949befcd5a9a8a209808e7c9%22%2C%22last_refreshed%22%3A1532306445.4836139679%7D; rur=PRN; urlgen="{\"time\": 1532295222\054 \"88.196.120.23\": 3249\054 \"2001:7d0:8b1b:d80:59ac:b6fd:fc77:754f\": 3249}:1fhOwz:lMzBvH8bTYwoOqWauglUMXbkGCU"""\
cookie_object = http.cookies.SimpleCookie(str_cookies)
cookies = {}
for key, morsel in cookie_object.items():
    cookies[key] = morsel.value

requests.post(.... , cookies=cookies)

我建议您使用此instagram_private_api python模块,该模块已实现您可能需要的大多数方法,而不是您自己构建