zoukankan      html  css  js  c++  java
  • RestSharp 加号变空格 + HTTP 请求

    背景介绍

    与{公司Y}做接口对接工作,
    然后我根据{公司Y}提供的Demo写了一个请求,
    放到Postman中请求,是可以正确的返回数据的.

    但是,我在程序中,使用{RestSharp}模拟请求的时候,
    {公司Y}接口总是会返回,解密失败的提示...

    先上HTTP请求

    
    public static string Test()
    {
    	var client = new RestClient("http://api.test.com/");
    	var request = new RestRequest("Users", Method.POST);
    	//这个地方也是一个坑↓
    	//request.AddHeader("Accept", "text/html, application/xhtml+xml, */*");
    	//request.AddHeader("Accept", "*/*");
    	request.AddHeader("Accept", "text/html");
    
    	request.AddParameter("key", "peXUsje73l2Z3r6g5aacVKcJ++vD+2IsQB6DaUlD0Elgg=", ParameterType.GetOrPost);
    	return client.Execute(request).Content;
    }
    
    

    发现问题所在→"+"

    仔细看了下{公司Y}提供的key值,里面含有"+"...
    所以情况差不多就是,
    {公司Y}提供了一个,自己解密不了的key...

    确认问题所在...

    我使用抓包工具{Wireshark},
    比较了一下postman发出的请求和程序发出的请求...
    确认了,确实是因为程序发出的请求会将"+"号替换为" "(空格)

    试过将"+"url编码为"%2b"

    试着将"+"号改变为"%2b",
    但是{公司Y}会提示加密串的长度太长...
    毕竟是和其它公司对接,
    如果是自己负责HTTP的请求和响应,
    那肯定是HTTP请求的时候,先将参数Url编码一下,
    HTTP响应的时候,先将参数Url解码一下...

    解铃还须系铃人...

    最终{公司Y}提供了一个自己可以解密的key...(不含"+"号)

    不解之地

    为什么postman可以,但是程序使用RestSharp请求的不行呢...
    postman底层将"+"号处理了一下?

  • 相关阅读:
    ehcache 的 配置文件: ehcache.xml的认识
    Hibernate的二级缓存(SessionFaction的外置缓存)-----Helloword
    QBC检索和本地SQL检索
    HQL的检索方式
    HQL的第一个程序
    Ubuntu Error: No module named 'apt_pkg' 怎么办?
    Linux 后台运行python .sh等程序,以及查看和关闭后台运行程序操作
    ubuntu install redis/mongo 以及 监控安装
    Mac 上的 redis
    Mac 解决硬盘插入不能写的问题
  • 原文地址:https://www.cnblogs.com/love-zf/p/13628423.html
Copyright © 2011-2022 走看看