私は複数のサーバーに投稿要求を出しています。これらのサーバーは1つを除くすべてのjsonを返します。そのうちの1人が次のようなデータを返します:1fe2 80b9 0800 0000 0000 0400 c3ac c2bd。C#でポストリクエストを行うと、奇妙な出力が発生する
私は残りのクライアントと同じことをすると、すべてのサーバーが有効なJsonから取得しますが、C#で行うと、サーバーの1つがその種類のデータを返します。
私はこれを行うには、次のコードを使用し:
public static string MakeRequest(string url, string requestBody, string methodName)
{
string result = "";
using (var client = new WebClient())
{
client.Headers[HttpRequestHeader.ContentType] = "application/json";
result = client.UploadString(string.Format("{0}{1}", url, methodName), "POST", requestBody);
}
return result;
}
私も、この(旧コード)を試してみました:
public static string MakeRequestA(string url, string requestBody, string methodName)
{
byte[] postBytes = Encoding.ASCII.GetBytes(requestBody);
var request = (HttpWebRequest)WebRequest.Create(string.Format("{0}{1}", url, methodName));
request.KeepAlive = false;
request.ProtocolVersion = HttpVersion.Version11;
request.Method = "POST";
request.ContentType = "application/json";
request.Accept = "text/plain";
request.ContentLength = postBytes.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(postBytes, 0, postBytes.Length);
requestStream.Close();
WebResponse response = request.GetResponse();
Console.WriteLine (((HttpWebResponse)response).StatusDescription);
var dataStream = response.GetResponseStream();
var reader = new StreamReader (dataStream);
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
return responseFromServer;
}
彼らはあるので、私は本当にあなたのサーバーのURLを与えることはできませんプライベート。誰でも私はなぜ有効なJSONの代わりにこのデータを取得しているのか?
要求のヘッダーにユーザーエージェントとホストを追加する必要があります。最近私は、適切なユーザーエージェントなしでリクエストを処理できなかったWebサービスで作業しました。 –
[Fiddler](http://www.telerik.com/fiddler)プロファイラを入手し、どちらの場合でも何がサーバーに送信されるのかを確認すると、その違いを確認できます。 – trailmax
確かに私には分かりませんが、もっと多くのヘッダーを追加する必要があります。リストについては、https://www.soapui.org/testing-dojo/best-practices/understanding-rest-headers-and-parameters.html –