用python实现http请求
我想在python的帮助下模拟对ok.ru的请求 我所做的用python实现http请求,python,web-scraping,request,Python,Web Scraping,Request,我想在python的帮助下模拟对ok.ru的请求 我所做的 获取页面 (已完成) 输入要选择位置的文本,弹出菜单出现 在浏览器开发工具中,找到与弹出菜单对应的requst建议位置(见图) 建议位置请求使用参数: // Request Headers :authority: ok.ru :method: POST :path: /web-api/v2/search/suggestLocations :scheme: https accept: applic
// Request Headers
:authority: ok.ru
:method: POST
:path: /web-api/v2/search/suggestLocations
:scheme: https
accept: application/json, text/javascript, */*; q=0.01
accept-encoding: gzip, deflate, br
accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
content-length: 89
content-type: text/plain;charset=UTF-8
cookie: bci=3082280438089561982; _statid=d33e9044-8d2b-4e5d-a3fd-e65ca657312f; _hd=h; tmr_lvid=2ac18e93052a4516697406103a6db5b3; tmr_lvidTS=1575669087459; _flashVersion=0; community-lang=ru; _userIds=""; klos=0; AUTHCODE=PbjA0slw51_fVLfNIPdAJdv_82O5bU04nyJmZ6bTK4mpqUJLojaxxW9TzFtp6W3-A6w04WD6bA3-gy2T5WoMnVtoZpGdqcbSTGAwmOGEza5tpQOJBbR6WH9MGuHIUu1723LUi0MLf-fzltk_3; JSESSIONID=8218b2b8c2812e5b4d36e84875004ebe2efbff9865492d2f.2eedc443; LASTSRV=ok.ru; msg_conf=2468555756792551; viewport=762; CDN=; TZ=6; nbp=; cudr=0; tmr_detect=1%7C1604937734327; tmr_reqNum=309; TZD=6.406; TD=406
dnt: 1
ok-screen: searchResult
origin: https://ok.ru
referer: https://ok.ru/
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-origin
strd: false
tkn: fryryeONJwI5hQOEHQc-05mvliDDbThF
user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36
// Request payload
'{"id": 39, "parameters": {"query": "Но","countryId": "10414533690"}}'
对此请求的响应是一组城市
{"id":"39","success":true,"result":[{"text":{"value":"Новосибирск","highlights":[{"from":0,"to":2}]}},{"text":{"value":"Новокузнецк","highlights":[{"from":0,"to":2}]}},{"text":{"value":"Новороссийск","highlights":[{"from":0,"to":2}]}},{"text":{"value":"Новочеркасск","highlights":[{"from":0,"to":2}]}},{"text":{"value":"Новомосковск","highlights":[{"from":0,"to":2}]}},{"text":{"value":"Новый Уренгой","highlights":[{"from":0,"to":2}]}},{"text":{"value":"Норильск","highlights":[{"from":0,"to":2}]}},{"text":{"value":"Ноябрьск","highlights":[{"from":0,"to":2}]}},{"text":{"value":"Ногинск","highlights":[{"from":0,"to":2}]}},{"text":{"value":"Новоалтайск","highlights":[{"from":0,"to":2}]}}]}
已创建代码,但收到空输出。预期响应与上述响应类似
import json
import requests
def search_city():
headers = {
'authority': 'ok.ru',
'method': 'POST',
'path': '/web-api/v2/search/suggestLocations',
'scheme': 'https',
'accept': 'application/json, text/javascript, */*; q=0.01',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
'content-length': '115',
'content-type': 'text/plain;charset=UTF-8',
'cookie': 'bci=3082280438089561982; _statid=d33e9044-8d2b-4e5d-a3fd-e65ca657312f; _hd=h; tmr_lvid=2ac18e93052a4516697406103a6db5b3; tmr_lvidTS=1575669087459; _flashVersion=0; community-lang=ru; _userIds=""; klos=0; AUTHCODE=PbjA0slw51_fVLfNIPdAJdv_82O5bU04nyJmZ6bTK4mpqUJLojaxxW9TzFtp6W3-A6w04WD6bA3-gy2T5WoMnVtoZpGdqcbSTGAwmOGEza5tpQOJBbR6WH9MGuHIUu1723LUi0MLf-fzltk_3; JSESSIONID=8218b2b8c2812e5b4d36e84875004ebe2efbff9865492d2f.2eedc443; LASTSRV=ok.ru; msg_conf=2468555756792551; viewport=762; CDN=; TZ=6; nbp=; cudr=0; tmr_detect=1%7C1604937734327; tmr_reqNum=309; TZD=6.406; TD=406',
'dnt': '1',
'ok-screen': 'searchResult',
'origin': 'https://ok.ru',
'referer': 'https://ok.ru/',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'strd': 'false',
'tkn': 'fryryeONJwI5hQOEHQc-05mvliDDbThF',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'
}
""" Attempt 1
data = {
'data': '{"id": 39, "parameters": {"query": "Но","countryId": "10414533690"}}'
}"""
# Attempt 2
data = {"id": 39, "parameters": {"query": "Но","countryId": "10414533690"}}
url = "https://www.facebook.com/api/graphql/"
url = "https://www.facebook.com/api/graphql/"
response = requests.post(url, headers=headers, data=data)
print(response) # <Response [200]>
html = response.text
print(html) # empty
search_city()
导入json
导入请求
def search_city():
标题={
“authority”:“ok.ru”,
'method':'POST',
“路径”:“/web api/v2/search/suggestLocations”,
'方案':'https',
“接受”:“应用程序/json,文本/javascript,*/*;q=0.01”,
“接受编码”:“gzip,deflate,br”,
‘接受语言’:‘ru-ru,ru;q=0.9,en-US;q=0.8,en;q=0.7’,
“内容长度”:“115”,
“内容类型”:“文本/普通;字符集=UTF-8”,
“cookie”:bci=3082280438089561982;_statid=d33e9044-8d2b-4e5d-a3fd-e65ca657312f;_hd=h;tmr_lvid=2ac18e93052a4516697406103a6db5b3;tmr_lvidTS=157569087459;_flashVersion=0;community lang=ru;_userIds=“”4月6日TTTvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv6-vv6-v6-v6-v6-v6-v6-v6-v6-v6-v6-v6-v6-cococo6-v6-v6-v6-v6-v6-v6-v6-v6-v6-v6-v6-v6-v6-v6-v6-v6-v6-v6-v6-v6-v6-6-v6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-6-4-4-4-4-4-4-4-4-4-4-4-37734327;tmr_reqNum=309;TZD=6.406;TD=406',
“dnt”:“1”,
“确定屏幕”:“搜索结果”,
“来源”:https://ok.ru',
“referer”:https://ok.ru/',
“sec fetch dest”:“empty”,
“秒获取模式”:“cors”,
“sec获取站点”:“同一来源”,
'strd':'false',
“tkn”:“fryryeONJwI5hQOEHQc-05mvliDDbThF”,
“用户代理”:“Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/86.0.4240.75 Safari/537.36”
}
“”“尝试1
数据={
'数据':'{“id”:39,“参数”:{“查询”:“href”,“国家id”:“10414533690”}
}"""
#尝试2
数据={“id”:39,“参数”:{“查询”:“href”,“国家id”:“10414533690”}
url=”https://www.facebook.com/api/graphql/"
url=”https://www.facebook.com/api/graphql/"
response=requests.post(url,headers=headers,data=data)
打印(答复)#
html=response.text
打印(html)#空
搜索城市()
问题:我如何收到预期的json响应
您好,请尝试使用selenium webdriver,您不能仅使用请求与页面交互。确定。但是,如果我想在selenium的帮助下发出http请求,有效负载
data={'no_known_name':{“id”:39,“parameters”:{“query”:“khö”,“countryId”:“10414533690”}}}
我应该如何命名dict的键?也许您不需要任何头。你在odnoklassniki,应该有ui导航系统。是的,但我不想使用ui。好的,请告诉我你想做什么,也许我会帮你。