Web服务调用的HTTP GET编码

时间:2011-12-16 20:43:29

标签: c# python http get

我有一个我用C#调用的Web服务。我已经能够使用简单的GET查询成功获得响应,例如:

http://localhost:8080/cgi-bin/py-wps.cgi?service=wps&version=1.0.0&request=describeprocess&identifier=test

但是,当进行更复杂的查询时,响应始终是错误的。

http://localhost:8080/cgi-bin/py-wps.cgi?service=wps&version=1.0.0&request=execute&identifier=test&datainputs=[key1=val1,val2,val3;key2=val4;key3=val5]

我正在调用的Web服务是使用PyWPS发布的,如果放在浏览器中,我正在使用的查询字符串是有效的。

我尝试转义键值对中的所有值:

e.g. "datainputs=[key1="+Uri.EscapeDataString("val1"), ...

我也尝试了

的组合
HttpUtility.UrlEncode

HttpUtility.UrlPathEncode

我收到如下错误:异常exceptionCode =“MissingParameterValue”locator =“key1”

我不确定我做错了什么,但这些网址在浏览器中正常工作,所以我怀疑我编码错误。我找不到任何单个键值对包含键值对列表的帖子(即datainputs = [key1 = v1,v2,v2; ... etc)

非常感谢您对此问题的任何帮助。

编辑:这就是我调用网络服务的方式

var targetUri = new Uri(uri);
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(targetUri);
        req.Method = method.ToUpper();
        req.ContentLength = 0;
        req.ContentType = "text/xml";

        HttpWebResponse response = (HttpWebResponse)req.GetResponse();
        Stream responseStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(responseStream);

        string responseString = reader.ReadToEnd();

        reader.Close();
        responseStream.Close();
        response.Close();

        return responseString;

1 个答案:

答案 0 :(得分:0)

你的'='登录“[key1 = val1,val2,val3; key2 = val4; key3 = val5]”将需要双重转义。尝试转义datainputs的值,然后转义完整的URL。