0

VB.NETアプリからWebリソースを使用する必要があります。アクセストークンを正常に取得し、それを使用して保護されたリソースを呼び出す準備ができました。ただし、保護されたリソースを呼び出すたびに、Authorizationフィールドがヘッダーに追加されていないため、401Unauthorized応答を受け取ります。

これが私のコードです。

WebRequest = DirectCast(Net.WebRequest.Create(ApiUri), HttpWebRequest)
WebRequest.Method = "POST"
WebRequest.ContentType = "application/json"
WebRequest.ContentLength = Bytes.Length
Dim RequestStream As IO.Stream = WebRequest.GetRequestStream
RequestStream.Write(Bytes, 0, Bytes.Length)
RequestStream.Close()
WebRequest.Headers("Authorization") = "OAuth " & _
                                      "oauth_version=""1.0""," & _
                                      "oauth_nonce=""" & Nonce & """," & _
                                      "oauth_timestamp=""" & TimeStamp & """," & _
                                      "oauth_consumer_key=""" & ConsumerKey & """," & _
                                      "oauth_token=""" & Token & """," & _
                                      "oauth_signature_method=""HMAC-SHA1""," & _
                                      "oauth_signature=""" & Signature & """"
WebResponse = DirectCast(WebRequest.GetResponse(), HttpWebResponse)

次に、Fiddlerを使用してリクエストを監視します。Fiddlerに表示されるのは、以下に示すように401応答のリクエストだけです(本文を除く)。

リクエスト

POST ***url*** HTTP/1.0
Content-Type: application/json
Host: ***host***
Content-Length: 45
Connection: Keep-Alive

応答

HTTP/1.0 401 Unauthorized
X-Powered-By: PHP/5.3.13
WWW-Authenticate: Basic realm="***realm***"
Content-type: application/json
Content-Length: 79
Connection: keep-alive
Date: Mon, 07 Jan 2013 01:13:22 GMT
Server: lighttpd/1.4.28

私がインターネットで読んだところはどこでも、HttpWebRequestが最初にサーバーにチャレンジし、ここに表示されているように401応答を受信する必要があることを示しています。次に、ヘッダーに「Authorization」フィールドを追加して再試行し、200OK応答を取得する必要があります。この2番目の部分は起こりません。これがどのように正しく機能するのか理解していませんか、それとも何か間違ったことをしていますか?

4

1 に答える 1

0

ストリームではなく、BinaryWriterを使用してコンテンツを追加する必要があることがわかりました。

だからこれの代わりに。

WebRequest.ContentLength = Bytes.Length
Dim RequestStream As IO.Stream = WebRequest.GetRequestStream
RequestStream.Write(Bytes, 0, Bytes.Length)
RequestStream.Close()

これを行う。

Using Writer As New IO.BinaryWriter(WebRequest.GetRequestStream)
    Writer.Write(Bytes)
End Using
于 2013-01-10T06:37:42.837 に答える