Как использовать 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 данных.