есть код
def _call(self, method="GET", subdomain="api", path="/", headers=None, private=False, data=None, **params):
url = "https://{0}.server.xx{1}".format(subdomain, path)
print("url= " + url)
print("subdomain= " + subdomain)
if data:
print("data= " + data)
print("method= " + method)
headers = headers or dict()
headers.update({
"Client-ID": self.CLIENT_ID1 if not private else self.CLIENT_ID2
})
return self.session.http.request(method, url, data=data, params=params, headers=headers)
на входе имеем:
url= https://gql.server.xx/gql
subdomain= gql
data= {"param1": "value1", "param2": "value2"}
method= POST
Нужно повторить этот запрос, например, в Postman’е. Как узнать, как выглядит отправляемая строка?
Когда пытаюсь повторить запрос в Postman’e, он выдаёт
{
"errors": [
{
"message": "syntax error: unexpected \"\\\"operationName\\\"\", expecting Ident",
"locations": [
{
"line": 1,
"column": 8
}
]
}
],
"extensions": {
"durationMilliseconds": 1,
"requestID": "01EW7Q8WMMFD9DRD842W5PTCYP"
}
}
Как тогда у питона это получается? И как повторить этот запрос вне питона?
AlexP
(Alex P.)
17.Январь.2021 09:17:54
#2
Какая? Вот же данные
только надо смотреть в каком формате отправить надо: JSON, urlencoded, …
В заголовках или каких-нибудь значениях по умолчанию session
скорее всего есть про это.
print(headers)
print(self.session)
Или отладчиком зайти внутрь self.session.http.request
и т.д.
Вообще можно просто посмотреть запросы например через
Fiddler is a web debugging tool for logging HTTP/S traffic. Inspect traffic, mock requests/responses, share sessions, collaborate within teams to debug issues.
Заходил, смотрел. Там все параметры отдельно.
Он не перехватывает из питона
А сама строка-то как должна выглядеть?
server.com/gql?json...
или как?
я всё уже перепробовал
AlexP:
print(self.session)
Это куда именно? Если написать перед
res = Session.request(self, method, url,
headers=headers,
params=params,
timeout=timeout,
proxies=proxies,
*args, **kwargs)
print(res)
То срабатывает экскепшен.
AlexP
(Alex P.)
17.Январь.2021 11:13:52
#5
URL же вот
данные видимо в теле.
Надо просто прокси указать (порт в настройках фиддлера). И еще опцию про то, что не проверять сертификат (странно, обычно не надо, видимо тут Certificate Pinning ).
streamlink --http-proxy http://127.0.0.1:8866 --http-no-ssl-verify
Ну и в настройках фиддлера понажимать кнопки про HTTPS и Trust.
ЗЫ фиддлер скатился, требует логиниться при запуске (
Теперь перехватывает. Он показывает те заголовки и JSON из стримлинка.
Но я всё-равно не понимаю, как именно отправляется сам запрос. Где это смотреть?
дык уже давно, вроде
AlexP
(Alex P.)
17.Январь.2021 11:37:06
#7
Так вот же в Raw весь запрос: заголовки, тело.
И что? Как это повторить через Postman или curl? Там ошибки выдаются.
типа этой
"message": "syntax error: unexpected \"\\\"operationName\\\"\", expecting Ident",
AlexP
(Alex P.)
17.Январь.2021 11:56:55
#9
Добавить все заголовки (то, что сверху), добавить тело (то, что внизу).
Для тела в постмане вроде можно выбрать raw
и скопировать текст JSON.
вот он и ругается на первую кавычку и выдаёт эту ошибку.
убрал слово query
. Теперь ругается
SSL Error: Unable to verify the first certificate
Disable SSL Verification <<кнопка
Learn more about troubleshooting API requests <<ссылка
нажал disable
- запрос ушел и даже вернул правильный ответ
Теперь я не понимаю, как сделать это программно. Я только что осознал, что впервые вижу запрос, содержащий тело, а не только заголовки. По-этому и туплю.
Создаём клиент и вешаем на него заголовки. А тело на него как повесить?
AlexP:
Зависит от библиотеки.
THTTPClient
в Delphi
и
WebClient
в C#
а делфи? У меня там уже готовая прога. Надо только запрос отправить и снова будет работать.
А на C#
она только в зачатке.
AlexP
(Alex P.)
17.Январь.2021 13:29:22
#17
А тело куда? const ASource: TStrings;
это тело? Не вижу там ни слова про тело.
AlexP
(Alex P.)
17.Январь.2021 13:51:57
#19
Да.
To send the content of a string list, provide your instance of TStrings as ASource
Странно, что нельзя просто строку. Но видимо можно просто TStringList
с одним элементом (или свойство Text
установить).