用python实现http请求

用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

我想在python的帮助下模拟对ok.ru的请求

我所做的

  • 获取页面 (已完成)
  • 输入要选择位置的文本,弹出菜单出现
  • 在浏览器开发工具中,找到与弹出菜单对应的requst建议位置(见图)
  • 建议位置请求使用参数:

     // 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。好的,请告诉我你想做什么,也许我会帮你。