当前位置: 首页 > 知识库问答 >
问题:

无法将curl转换为python请求

康言
2023-03-14

我在开发工具的帮助下将请求复制为CURL,并收到:

curl 'https://ok.ru/web-api/v2/search/suggestCommunities' \
  -H 'authority: ok.ru' \
  -H 'accept: application/json, text/javascript, */*; q=0.01' \
  -H 'dnt: 1' \
  -H 'strd: false' \
  -H 'ok-screen: searchResult' \
  -H 'content-type: text/plain;charset=UTF-8' \
  -H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36' \
  -H 'tkn: eezDYrXx08aiDcsqCCCheb1fGdGIvuJ9' \
  -H 'origin: https://ok.ru' \
  -H 'sec-fetch-site: same-origin' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-dest: empty' \
  -H 'referer: https://ok.ru/' \
  -H 'accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7' \
  -H 'cookie: bci=5639450919803662892; _statid=72da67cb-c979-4442-948d-b76b70d16b59; tmr_lvid=2ac18e93052a4516697406103a6db5b3; tmr_lvidTS=1575669087459; msg_conf=2468555756792551; _flashVersion=0; cudr=0; klos=0; AUTHCODE=EjUzQb4TKlF4mTbJklDGt-dg-65th4TTwrbLdAPrK8mvgyWCFTIdNoeMcBkVrvZruEBK9frXso45DCrvoq8K9p-7ZUcDvASmGvV13LQ5gxgls-AFQjI7ZEPmb6u08TLFJ57ZCb4R00LhHto_3; JSESSIONID=a381dc641575389c384c9c7eacd747d14853670edfe4c807.f00f63fb; LASTSRV=ok.ru; viewport=762; TZ=6; CDN=; nbp=; tmr_detect=1%7C1605813256183; tmr_reqNum=495; TZD=6.683; TD=683' \
  --data-binary $'{\n  "id": 38,\n  "parameters": {\n    "category": "UNIVERSITY",\n    "cityId": "10399843062",\n    "query": "Рос"\n  }\n}' \
  --compressed

已将请求复制到控制台(curl工作正常)。收到的结果

{"id":"38","success":true,"result":[{"id":"6100259920","category":"UNIVERSITY","name":"СПбГУКиТ, Санкт-Петербургский государственный университет кино и телевидения (бывш. ЛИКИ)","badgeName":"СПбГУКиТ"},{"id":"6098569210","category":"UNIVERSITY","name":"СПбГУЭФ (ФИНЭК), Санкт-Петербургский государственный университет экономики и финансов (бывш. ЛФЭИ им. Н.А. Вознесенского)","badgeName":"СПбГУЭФ (ФИНЭК)"},{"id":"6101852454","category":"UNIVERSITY","name":"СПбГУКИ, Санкт-Петербургский государственный университет культуры и искусств (бывш. ЛГИК им. Н.К. Крупской, СПбГАК)","badgeName":"СПбГУКИ"},{"id":"6096539930","category":"UNIVERSITY", ....

在的帮助下将curl转换为python请求https://curl.trillworks.com/收到:

import requests

headers = {
    'authority': 'ok.ru',
    'accept': 'application/json, text/javascript, */*; q=0.01',
    'dnt': '1',
    'strd': 'false',
    'ok-screen': 'searchResult',
    'content-type': 'text/plain;charset=UTF-8',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36',
    'tkn': 'eezDYrXx08aiDcsqCCCheb1fGdGIvuJ9',
    'origin': 'https://ok.ru',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-mode': 'cors',
    'sec-fetch-dest': 'empty',
    'referer': 'https://ok.ru/',
    'accept-language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
    'cookie': 'bci=5639450919803662892; _statid=72da67cb-c979-4442-948d-b76b70d16b59; tmr_lvid=2ac18e93052a4516697406103a6db5b3; tmr_lvidTS=1575669087459; msg_conf=2468555756792551; _flashVersion=0; cudr=0; klos=0; AUTHCODE=EjUzQb4TKlF4mTbJklDGt-dg-65th4TTwrbLdAPrK8mvgyWCFTIdNoeMcBkVrvZruEBK9frXso45DCrvoq8K9p-7ZUcDvASmGvV13LQ5gxgls-AFQjI7ZEPmb6u08TLFJ57ZCb4R00LhHto_3; JSESSIONID=a381dc641575389c384c9c7eacd747d14853670edfe4c807.f00f63fb; LASTSRV=ok.ru; viewport=762; TZ=6; CDN=; nbp=; tmr_detect=1%7C1605813256183; tmr_reqNum=495; TZD=6.683; TD=683',
}

data = '${\\n "id": 38,\\n "parameters": {\\n "category": "UNIVERSITY",\\n "cityId": "10399843062",\\n "query": "\u0420\u043E\u0441"\\n }\\n}'

response = requests.post('https://ok.ru/web-api/v2/search/suggestCommunities', headers=headers, data=data)
print(response.content)

已尝试此代码,但收到错误

body是无效的拉丁语-1。使用body.encode('utf-8'),如果你想发送它编码在UTF-8。

补充。编码('utf-8'))

response = requests.post('https://ok.ru/web-api/v2/search/suggestCommunities', headers=headers, data=data.encode('utf-8'))

但收到无效结果:

b'{成功:false,错误:{类型:1,typeName:INVALID_REQUEST,错误代码:api.invalid格式,错误消息:无效的请求格式:无法识别的令牌'$':被期望('true','false'或'null')\n at[Source:org.apache.catalina.connector.CoyoteInputStream@5399802b;行: 1,列: 3]"},"结果": null}'

如何才能收到有效的结果?

{"id":"38","success":true,"result":[{"id":"6100259920","category":"UNIVERSITY","name":"СПбГУКиТ, Санкт-Петербургский государственный университет кино и телевидения (бывш. ЛИКИ)","badgeName":"СПбГУКиТ"},{"id":"6098569210","category":"UNIVERSITY","name":"СПбГУЭФ (ФИНЭК), Санкт-Петербургский государственный университет экономики и финансов (бывш. ЛФЭИ им. Н.А. Вознесенского)","badgeName":"СПбГУЭФ (ФИНЭК)"},

使现代化

>

  • 尝试使用不带$的数据

    data='{\n"id": 38,\n"参数":{\n"类别":"大学",\n"城市ID":"10399843062",\n"查询":"\u0420\u043E\u0441"\n}\n}'

    收到错误

    UnicodeEncodeError:'ltin-1'编解码器无法编码位置99-101中的字符:正文 ('Рос') 是无效的linal-1。使用body.encode('utf-8'),如果你想发送它编码在UTF-8。

    数据=“{“id”:38,“参数”:{“类别”:“大学”,“城市id”:“10399843062”,“查询”:“\u0420\u043E\u0441”}”

    收到错误:

    UnicodeEncodeError:“latin-1”编解码器无法对位置89-91中的字符进行编码:正文('ПС')不是有效的latin-1。使用身体。如果要发送utf-8编码的文件,请对其进行编码(“utf-8”)。

  • 共有1个答案

    勾裕
    2023-03-14

    我想你不小心把$复制到了你的python代码中。试着改成这一行:

    data = '{\\n "id": 38,\\n "parameters": {\\n "category": "UNIVERSITY",\\n "cityId": "10399843062",\\n "query": "\u0420\u043E\u0441"\\n }\\n}'
    

    您甚至可以删除\n

    data = '{ "id": 38, "parameters": { "category": "UNIVERSITY", "cityId": "10399843062", "query": "\u0420\u043E\u0441" }}'
    

    至于那个

    UnicodeEncodeError:“latin-1”编解码器无法对位置89-91中的字符进行编码:正文('ПС')不是有效的latin-1。使用身体。如果要发送utf-8编码的文件,请对其进行编码(“utf-8”)。

    看看这个论坛的结尾

    a = "\u13E0\u19E0\u1320"
    a.encode('latin1')  # Throws UnicodeEncodeError, proves that this can't be expressed in ISO-8859-1.
    a.encode('utf-8')  # Totally fine.
    

    因此,您可以尝试以下方法:

    data = '{ "id": 38, "parameters": { "category": "UNIVERSITY", "cityId": "10399843062", "query": "Poc" }}'
    

    或者

    data = '{ "id": 38, "parameters": { "category": "UNIVERSITY", "cityId": "10399843062", "query": "\u0420\u043E\u0441" }}'
    data = data.encode('utf-8')
    
     类似资料:
    • 我正在尝试将curl中的以下工作请求转换为python请求(使用请求http://docs.python-requests.org/en/v0.10.7/). (请注意,我使用了一个假url,但该命令确实适用于真实url) 接收端(在烧瓶中运行)执行以下操作: 在curl(7.30)中,在Mac OS X(10.9)上运行,上面的命令正确返回使用标记查询过滤的json列表。 我的python脚本如

    • 问题内容: 我有以下CURL请求,谁能请我确认subesquest HTTP请求是什么? 会是这样吗? 任何人都可以帮助我将上述curl请求完全转换为httpreq。 提前致谢。 苏维 问题答案: 有很多方法可以实现这一目标。在我看来,以下一项是最简单的,同意它不是很灵活,但是可以工作。

    • 我通过邮递员以以下方式调用我的java webservice(POST请求),这种方式工作得非常好(即,我可以看到我的记录被插入到数据库中): 下面是选项卡中的内容: 我必须使用CURL在PHP中调用相同的请求,而不是通过POSTMAN调用它。我想知道是否有办法将此命令导出到命令,以便在PHP代码中使用它?我在网上的许多地方发现了相反的方法,有人要求将基于Curl的请求转换为POSTMAN,但却不

    • 我创建了一个python脚本,并想把它给我的朋友。所以我去youtube看了这个视频(在尝试了很多其他视频之后)。我运行它,得到一个薄层色谱库错误。没问题,我找到了解决这个问题的答案,就在这里的堆栈流中。我输入这段代码(将Python35更改为36,并确保我的薄层色谱位于它所说的相同位置)。我运行它,但得到一个不同的错误,在我的cmd提示符中说 我只是想把我的游戏发送给朋友<请帮忙。我正在使用Py

    • 我在将curl请求转换为python代码请求时遇到了麻烦。 工作卷曲请求 卷曲-X柱“http://xxxxxx“-H”accept:application/json“-H”内容类型:application/x-www-form-urlencoded“-H”授权:令牌882a6ec053ff6dbac623eff400f67c0bb6ade399“-d”name=namename” 不工作pyth

    • 问题内容: 我从来没有做过卷曲,所以需要一些帮助。我已经尝试通过示例来解决这个问题,但是我无法理解! 我有一个curl命令,可以从linux(ubuntu)命令行成功运行,该命令行通过api将文件放入Wiki。 我需要将此curl命令合并到我正在构建的PHP脚本中。 如何转换curl命令,使其在PHP脚本中起作用? cookie.txt包含身份验证,但是我不会在脚本中将其以明文形式出现,因为这将仅