7

メソッドをGETに設定し、メッセージ本文を含める必要があるAPIを使用しています。ただし、これを実行しようとすると、「この動詞タイプのコンテンツ本文を送信できません」というエラーが発生します。HttpWebRequestクラスはこれをサポートしておらず、例外の理由であると読みました。回避策はありますか?

これは私の現在のコードです:データはバイト配列としてエンコードされたjson文字列です

HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
request.ContentType = "application/json";
request.ContentLength = data.Length;
using (Stream requestStream = request.GetRequestStream()) {
    requestStream.Write(data.ToArray(), 0, (int)data.Length);
}

これは私がエミュレートしようとしているPHPコードです

<?php
$data = array("id" => "1234");
$data_string = json_encode($data);
$ch = curl_init('url');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($data_string))
);
$result = curl_exec($ch);
var_dump($result);
?>

ありがとうございました、

4

3 に答える 3

2

RESTに積極的に反対するAPIを何と呼びますか?「HASTE」?「不穏」?

運が良ければ、サービスは動詞が何であるかを気にせず、PHPコードはGETを使用して、サーバーがそれをブロックしなかったというバグにぶつかりました。これは、正しく動作する限り、かなりマイナーなバグです。 、POSTで問題ありません。

それができない場合、最善の策は、(GETに自然に適合する読み取り要求の場合)RFC 2616に従って使用されている適切なヘッダーを持つURIのパラメーターを受け入れるか、または他の方法で何かを受け入れることができる代替メソッドがあるかどうかを確認することです。 POST、GETなど。

それが機能しない場合は、TcpClientの上にHTTPクライアントを構築する必要があります。それはかなり恐ろしいでしょう。

于 2012-08-17T21:47:23.867 に答える
2

完全に可能ですが、新しいHttpClientクラスを使用する必要があります:https ://stackoverflow.com/a/47902348/70345

于 2017-12-20T08:57:53.660 に答える
-3

GETリクエストでコンテンツを送信することはお勧めしません。詳細については、この投稿を参照してください:リクエスト本文を使用したHTTP GET

そして、これはロイ・フィールディングがトピックについて言わなければならないことです。

于 2012-08-17T21:13:43.273 に答える