Как использовать python urllib2 для отправки данных json для входа

Я хочу использовать python urllib2 для имитации действия входа в систему, я использую Fiddler для захвата пакетов и получил, что действие входа-это просто запрос ajax, а имя пользователя и пароль отправляются как данные json, но я понятия не имею, как использовать urllib2 для отправки данных json, помощь...

4 ответов


import urllib2
import json
# Whatever structure you need to send goes here:
jdata = json.dumps({"username":"...", "password":"..."})
urllib2.urlopen("http://www.example.com/", jdata)

предполагается, что вы используете HTTP POST для отправки простого объекта json с именем пользователя и паролем.


Для Python 3.x

обратите внимание на следующее

  • В Python 3.x urllib и urllib2 модули в сочетании. Модуль называется urllib. Итак, помните, что urllib в Python 2.x и urllib в Python 3.x-это разные модули.

  • данные POST для urllib.request.Request в Python 3 не принимает строку (str) -- вы должны пройти


вы можете указать данные по запросу:

import urllib
import urllib2

url = 'http://example.com/login'
values = YOUR_CREDENTIALS_JSON

data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()

вы можете использовать библиотеку python "requests" для достижения этого:

http://docs.python-requests.org/en/latest/index.html

вы найдете такой пример:

http://docs.python-requests.org/en/latest/user/quickstart/#more-complicated-post-requests (более сложные запросы POST)

>>> import requests
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post("http://httpbin.org/post", data=payload)

Кажется, python не устанавливает хорошие заголовки, когда вы пытаетесь отправить JSON вместо urlencoded данных.