セレニティ・ナウ。
私はこのコードを持っています。これは昔ながらの .NET コマンド ライン アプリであり、動作します。
var postData = "hello@email.com:MyPassword";
Guid appKey = new Guid("a guid that is a valid app key");
var url = "https://the.internet.com/2.0/Authentication/Basic";
var login = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(postData));
var request = HttpWebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.Headers["Authorization"] = login;
request.Headers["app_key"] = appKey.ToString();
var requestStream = request.GetRequestStream();
requestStream.Write(Encoding.Default.GetBytes("1"), 0, 1);
var response = request.GetResponse();
Console.WriteLine(response.ToString());
わかりました、それは素晴らしいです、そして私はそれが好きです。コンソールに期待される応答が返されます。ただし、このジョイントをWP7に移植しようとしているので、私がやろうとしていることは次のとおりです。
public void Authenticate(string username, string password)
{
Guid appKey = new Guid("a guid that is a valid app key");
var url = "https://the.internet.com/2.0/Authentication/Basic";
var request = HttpWebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.Headers["app_key"] = appKey.ToString();
var postData = "hello@email.com:MyPassword";
var login = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(postData));
request.Headers["Authorization"] = login;
request.BeginGetRequestStream(OpenRequestStream, request);
}
void OpenRequestStream(IAsyncResult result)
{
var request = result.AsyncState as HttpWebRequest;
var stream = request.EndGetRequestStream(result);
stream.Write(Encoding.UTF8.GetBytes("1"), 0, 1);
stream.Flush();
stream.Close();
request.BeginGetResponse(AuthCallback, request);
}
void AuthCallback(IAsyncResult asyncResult)
{
HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
// this line is where i get the 404 exception
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);
using (StreamReader streamReader1 = new StreamReader(response.GetResponseStream()))
{
string resultString = streamReader1.ReadToEnd();
Console.Write(resultString);
}
if (Response != null)
Console.WriteLine("you won the game");
}
このコードを WP7 エミュレーターで実行すると、404 が発生します。それは私がまったく望んでいないことです。URL が正しいことは確かですが、ここで何が起こっているのでしょうか? エミュレータの問題でしょうか?私はここにデバイスを持っていないので、そうではないことを確認できません。
遠い過去にWP7で同様の呼び出しを行ったことを知っているので、何かばかげたことが起こっていると強く感じています。非常に奇妙なことの 1 つは、フィドラーで、私の悪い要求の 1 つでトンネル要求しか取得できず、ヘッダーが次のようになっていることです。
CONNECT the.internet.com:443 HTTP/1.0
User-Agent: NativeHost
Host: the.internet.com:443
Content-Length: 0
Connection: Keep-Alive
Pragma: no-cache
HTTP 1.0 を実行しているとのことですが、WP7 では ProtocolVersion を使用できないため、作業要求でわかるように 1.1 にすることはできません。作業要求 (コマンド ライン プログラム) を実行すると、次のようなフィドラー トンネル エントリが表示されます。
CONNECT the.internet.com:443 HTTP/1.1
Host: the.internet.com
Connection: Keep-Alive
そして、期待どおりの通常のリクエスト/レスポンスのペアを取得します。
どうすれば1.1にできますか?それは問題ですか????