M03-Aiwin 2023-05-23 21:51 采纳率: 75%
浏览 20
已结题

python发送http请求

我在使用Python发送HTTP的GET请求的时候,我发现无论使用requests还是urllib3进行请求,url后面的参数都会被urlencode编码,除了重写底层代码,有没有其它办法让它不进行url编码进行发送呢,就比如说http://127.0.0.1/index.php?p=,都会变成


http://127.0.0.1/index.php?p=%3C?=phpinfo();?%3E   

但是我就想直接这样在发送的时候是http://127.0.0.1/index.php?p=,不进行编码。

请求各位师傅,可有解决办法?

  • 写回答

3条回答 默认 最新

  • 断水流大撕兄 HarmonyOS创作领域新星创作者 2023-05-24 17:56
    关注

    你的问题是,在使用requests或urllib发送GET请求时,URL参数会被自动编码,但你希望不对参数进行编码直接发送。解决这个问题有两种办法:1. 手动构造URL,不使用库自动编码你可以直接构造完整的URL字符串,而不使用requests或urllib的GET参数设置方法。例如:

    url = 'http://127.0.0.1/index.php?p=<?=phpinfo();?>'
    requests.get(url)
    

    这样requests就会直接使用你构造的URL字符串发送请求,不会对其进行任何编码。2. 使用params参数,指定编码为Nonerequests和urllib都允许你通过params参数手动设置URL参数与值,并指定其编码方式。例如,requests中:

    requests.get('http://127.0.0.1/index.php', 
                 params={'p': '<?=phpinfo();?>'}, 
                 encode_params=None)
    

    通过设置encode_params=None,可以指定不对params中的参数与值进行编码。urllib中类似的设置参数为urlfeldandvalues,该参数需为一个list,格式为:

    [("urlparam1", "value1"), ("urlparam2", "value2")]
    

    然后在构造Request对象时,设置urlencode=False,例如:

    req = urllib.request.Request("http://127.0.0.1/index.php", 
                                 urlfeldandvalues, 
                                 encode_params=False)  
    

    这两种方法都可以解决你的问题,实现在发送GET请求时不对URL参数进行编码。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月25日
  • 已采纳回答 5月24日
  • 创建了问题 5月23日

悬赏问题

  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件