2 qq 30925889 qq_30925889 于 2017.09.04 11:14 提问

C#https的post请求,发送的uri接收方接收的地址乱了 100C
    public string HttpPost(string Url, string postDataStr)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
        //request.AllowAutoRedirect = false; //禁止自动重定向
        request.Method = "POST";
        request.Headers.Add("AK", "c74f6e81f3854e928a4e2633b9d55a89");
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = Encoding.UTF8.GetByteCount(Url);
        request.CookieContainer = cookie; //cookie信息由CookieContainer自行维护
        Stream myRequestStream = request.GetRequestStream();
        using (StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312")))//gb2312
        {
            myStreamWriter.Write(Url);
            myStreamWriter.Close();

        }
        HttpWebResponse response = null;
        try
        {
            this.SetCertificatePolicy();
            response = (HttpWebResponse)request.GetResponse();
        }
        catch (System.Exception ex)
        {
            throw;
        }
        //获取重定向地址
        //string url1 = response.Headers["Location"];
        if (response != null)
        {
            Stream myResponseStream = response.GetResponseStream();
            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
            string retString = myStreamReader.ReadToEnd();
            //MessageBox.Show(retString);
            myStreamReader.Close();
            myResponseStream.Close();
            return retString;
        }
        else
        {
            return "error"; //post请求返回为空
        }
    }
 我发的:https://console-api-test.qibeitech.com/sign/productCheck/bindDevice?lockId=86812017491050&bikeId=http://ofo.so/plate/11000000&timestamp=1504487889209&sign=3c02b0dd1c2b5ba9df236b78e89c5916 


他们接收的:AKc74f6e81f3854e928a4e2633b9d55a89bikeIdhttp://ofo.so/plate/11000000http://ofo.so/plate/11000000https://console-api-test.qibeitech.com/sign/productCheck/bindDevice?lockId86812017491050lockId86812017491050timestamp15044878892091504487889209dcc59608864511e79673163ea306a3 

求帮助,小白一个,,之前没怎么做过网络通信的

6个回答

qq_30925889
qq_30925889   2017.09.04 11:25

不要沉啊

showbo
showbo   Ds   Rxr 2017.09.04 11:48

你搞清楚人家接口数据是需要get还是post发送数据的先,看你地址是get提交的数据,

你贴出来的他们那边的不是接受到数据了

showbo
showbo 接口api
3 个月之前 回复
showbo
showbo 回复妮娜风: 看接口数据
3 个月之前 回复
qq_30925889
qq_30925889 回复showbo: 具体怎么 做啊,我不太懂这个,临时接的任务边学边做的
3 个月之前 回复
showbo
showbo 回复妮娜风: post那你的参数怎么都放到url后面了,应该整到postDataStr这个参数里面,键值对,并且值编码下。
3 个月之前 回复
qq_30925889
qq_30925889 他们要的是post的,我发送的跟他们接收的不一样,按理说我发送的跟他们接收的一样才对,所以一直报签名错误啊
3 个月之前 回复
qq_30925889
qq_30925889   2017.09.04 11:53

在线等啊,如果我提供的数据不到位请告诉我。。被公司催了,拜托大家了

usecf
usecf   2017.09.04 12:58

很有可能是你转码的问题

m0_38093650
m0_38093650   2017.09.04 13:12

去掉:request.Headers.Add("AK", "c74f6e81f3854e928a4e2633b9d55a89");

qq_30925889
qq_30925889 不可以去掉的,去掉就连不上了。。必需要请求头,而且我刚刚也试过了
3 个月之前 回复
j550341130
j550341130   2017.09.04 17:29

两种方式试一下:
1. 不要把参数拼到后面, 而是解析到postDataStr里面, 一般可能是对象转成json字符串, 然后加密一下, 可以找找其他调用这个方法的地方是怎么处理的数据;
2. 还是拼参数, 但是把 request.Method = "POST" 改为 GET, 有的接口get/post都行, 但这种方式不太靠谱, 最好还是第一种方式;

Csdn user default icon
上传中...
上传图片
插入图片