Сегодня мы будем использовать общий тип данных запроса при тестировании интерфейса в форме ключ=значение и запрашивать его в кодировке urlencode. Некоторые люди, возможно, никогда с этим не сталкивались, потому что, если интерфейс не определен и не разобран таким образом, в этом нет необходимости.
Однако некоторые запросы интерфейса необходимо преобразовать таким образом, прежде чем запрос можно будет выполнить.
Позвольте мне в качестве примера взять интерфейс моего реального рабочего проекта, как показано на рисунке:
Видно, что данные тела этого интерфейса имеют форму ключ=значение и имеют urlencoded. Тип данных тела — байты, а не str.
статья передо мнойhttps://cloud.tencent.com/developer/article/2213005Упоминается вrequestsбиблиотекаpostВыбор параметров запроса метода,Подробно описывается, использует ли ключ=значение данные. но,При этом не учтено, что некоторые специальные интерфейсы необходимо перекодировать.,Только что встретились здесь,Давайте поговорим об этом один раз.
Здесь нам нужно использовать библиотеку urllib в python3. Теперь, когда python2 перестал обновляться, вот краткий обзор взаимосвязи между urllib, urllib2, urllib3 и запросами и python.
python2.X Доступны следующие имена библиотек: urllib, urllib2, urllib3, httplib, httplib2, requests。
python3.X Доступны следующие имена библиотек: urllib, urllib3, httplib2, requests。
Просто помните, что у python3 есть urllib, оба из которых являются urllib3 и Requests. Это не стандартные библиотеки. urllib3 Обеспечивает потокобезопасный пул соединений и поддержку отправки файлов и имеет мало общего с urllib и urllib2. requests Называет себя HTTP for Humans, Проще и удобнее в использовании.
python2 | python3 |
---|---|
import urllib2、import urllib、urllib2.Request | import urllib.request,urllib.error,urllib.parse、urllib.request |
import urlparse | import urllib.parse |
import urlopen | import urllib.request.urlopen |
import urlencode | import urllib.parse.urlencode |
import urllib.quote | import urllib.request.quote |
cookielib.CookieJar | http.CookieJar |
Давайте проанализируем http на картинке выше,Нам нужно перекодировать,Просто используй этоurllib
вurlencode
метод кодирования словаря,Используется для отправки данных вurl
Ждите операций。
Python3
середина Существует такжеurllib
иurllib3
Две библиотеки,Чтосерединаurllib
почтиPython2
серединаurllib
иurllib2
двамодульколлекция,Итак, наш наиболее часто используемыйurllib
модуль,иurllib3
как расширениемодульиспользовать。
Метод заключается в следующем:
urllib.parse.urlencode(values)
Вышеупомянутые красные поля — это три наиболее важных пункта. После этого вы можете нормально вызывать этот интерфейс. Наконец, получите бизнес-данные.
Вышеупомянутый метод обработки сообщений, в котором данные тела представляют собой словарь, а словарь содержит не только строки, но и значения, которые являются данными XML, которые необходимо перекодировать и содержат много бизнес-данных. Кроме того, если вам нужно изучить технологию разработки тестов или вы интересуетесь автоматизацией тестирования и любите пообщаться, вы можете присоединиться к группе для общения.
url="http://127.0.0.1/api/test"
headers = {'Content-Type':'application/json'}
auth_data = {
"jsonrpc":"2.0",
"method":"user.login",
"id":0
}
urllib.parse.urlencode() Строки не могут быть закодированы, можно закодировать только типы dict.
urllib.parse.urlencode() #ВоляdictПараметры типа преобразуются вquery_stringФормат(key=value&key=value),И перекодировать китайский,В конечном итоге он будет преобразован в тип байтов (поток байтов).,следующее:
query_string = urllib.parse.urlencode(auth_data).encode('utf8')
query_string — это тип байтов,Форматнравиться:b'jsonrpc=2.0&method=user.login&id=0'
#Если сервер требует передачи данных в формате json, сначала используйте json.dumps() Сначала преобразуйте параметр dict в str, а затем используйте bytes(), чтобы преобразовать его в тип байтов (поток байтов), как показано ниже:
#json.loads() transform str to dict;json.dumps() transform dict to str
query_string = bytes(json.dumps(auth_data),'utf8')
query_string имеет тип байтов и имеет такой формат: b'{"jsonrpc": "2.0", "method": "user.login"}
#urllib.request.Request() требует, чтобы передаваемые данные имели тип байтов (поток байтов).
request = urllib.request.Request(url,query_string,headers=headers)
reponse = urllib.request.urlopen(request).read()
content = json.loads(reponse.decode('utf8'))
print(content)