HttpWebRequest не отвечает - PullRequest
       3

HttpWebRequest не отвечает

0 голосов
/ 27 марта 2012

Я пытаюсь использовать HttpWebRequest в приложении WP7, но у меня проблема.Я никогда не получаю ответ от сервера: /

Что я делаю не так?

Вот код неисправного мира ...

Класс Util

public class RequestState
{
    // This class stores the State of the request.
    const int BUFFER_SIZE = 1024;
    public string requestData;
    public byte[] Data
    {
        get
        {
            ASCIIEncoding ascii = new ASCIIEncoding();
            byte[] encodedPostData = ascii.GetBytes(this.requestData);

            return encodedPostData;
        }
    }
    public byte[] BufferRead;
    public HttpWebRequest request;
    public HttpWebResponse response;

    public RequestState()
    {
        BufferRead = new byte[BUFFER_SIZE];
        requestData = string.Empty;
        request = null;
    }
}

Метод ...

private static ManualResetEvent allDone = new ManualResetEvent(false);
private static string PostRequest(string service, string email, string password, string source)
    {
        // Prepare request.
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(clientLoginUrl);
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";

        // Create an instance of the RequestState and assign the previous myHttpWebRequest1
        // object to it's request field.  
        RequestState myRequestState = new RequestState();
        myRequestState.request = request;
        myRequestState.requestData = String.Format(postData, service, email, password, source);

        // Get the response that will contain the Auth token.
        try
        {
            request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), myRequestState);
        }
        catch (WebException ex)
        {
            HttpWebResponse faultResponse = ex.Response as HttpWebResponse;
            if (faultResponse != null && faultResponse.StatusCode == HttpStatusCode.Forbidden)
                throw new IncorrectUsernameOrPasswordException(faultResponse.StatusCode, faultResponse.StatusDescription);
            else
                throw;
        }

        // Keep the main thread from continuing while the asynchronous
        allDone.WaitOne();

        if (myRequestState.response != null)
        {
            // Check for login failed.
            if (myRequestState.response.StatusCode != HttpStatusCode.OK)
                throw new LoginFailedException(myRequestState.response.StatusCode, myRequestState.response.StatusDescription);

            // Read.
            using (StreamReader reader = new StreamReader(myRequestState.response.GetResponseStream()))
                return reader.ReadToEnd();
        }
        else
            return string.Empty;
    }

    private static void GetRequestStreamCallback(IAsyncResult asynchronousResult)
    {
        RequestState requestState = (RequestState)asynchronousResult.AsyncState;
        HttpWebRequest request = (HttpWebRequest)requestState.request;

        // End the operation
        Stream postStream = request.EndGetRequestStream(asynchronousResult);

        // Write to the request stream.
        postStream.Write(requestState.Data, 0, requestState.requestData.Length);
        postStream.Close();

        // Start the asynchronous operation to get the response
        request.BeginGetResponse(new AsyncCallback(GetResponseCallback), requestState);
    }
    private static void GetResponseCallback(IAsyncResult asynchronousResult)
    {
        RequestState requestState = (RequestState)asynchronousResult.AsyncState;
        HttpWebRequest request = (HttpWebRequest)requestState.request;

        // End the operation
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
        requestState.response = response;

        allDone.Set();
    }

1 Ответ

0 голосов
/ 26 апреля 2012

Вы безуспешно пытались сделать запрос на несколько разных сайтов?

У меня тоже была эта проблема, потому что я пропустил некоторые параметры заголовка в запросе. Попробуйте загрузить плагин для и т. Д. Mozilla, который может перехватить ваш запрос из браузера на веб-сайте, а затем добавить эти заголовки из запроса в ваши заголовки в HttpWebRequest.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...