C # WebRequest не будет работать с этой ссылкой от LinkShare - PullRequest
0 голосов
/ 13 ноября 2010

Это сводит меня с ума. Я пытаюсь сделать что-то довольно простое, и я делал это много раз раньше. Просто пытаюсь вызвать REST API.

Я пытаюсь вызвать GetMessage с endpoint = "http://feed.linksynergy.com/productsearch?token=717f8c8511725ea26fd5c3651f32ab187d8db9f4b208be781c292585400e682d&keyword=DVD",, и он продолжает возвращать пустую строку. Если я передам ему любой другой действительный URL-адрес, он будет работать. Но если я просто скопирую и вставлю исходный URL-адрес в веб-браузер , возвращается нормально!

Может ли какой-нибудь умный разработчик сказать мне, что происходит?

Код ниже. Заранее спасибо.

Джеймс

публичная строка GetMessage (строка endPoint) { HttpWebRequest request = CreateWebRequest (endPoint);

        using (var response = (HttpWebResponse)request.GetResponse())
        {
            var responseValue = string.Empty;

            if (response.StatusCode != HttpStatusCode.OK)
            {
                string message = String.Format("POST failed. Received HTTP {0}", response.StatusCode);
                throw new ApplicationException(message);
            }

            // grab the response
            using (var responseStream = response.GetResponseStream())
            {
                using (var reader = new StreamReader(responseStream))
                {
                    responseValue = reader.ReadToEnd();
                }
            }

            return responseValue;
        }
    }

частный HttpWebRequest CreateWebRequest (конец строки) { var request = (HttpWebRequest) WebRequest.Create (endPoint);

        request.Method = "GET";
        request.ContentLength = 0;
        request.ContentType = "text/xml";

        return request;
  }

1 Ответ

0 голосов
/ 13 ноября 2010

Не уверен, почему ваш параметр ContentLength / ContentType - это обычно для HTTP POST , где существует тело запроса , для которого вы записываете данные через поток.

Это HTTP GET , поэтому тело запроса отсутствует. (просто URI со строкой запроса)

Это должно работать:

using System;  
using System.IO;  
using System.Net;  
using System.Text;  

// Create the web request  
HttpWebRequest request = WebRequest.Create("http://www.someapi.com/") as HttpWebRequest;  

// Get response  
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)  
{  
    // Get the response stream  
    StreamReader reader = new StreamReader(response.GetResponseStream());  

    // Console application output  
    Console.WriteLine(reader.ReadToEnd());  
}

РЕДАКТИРОВАТЬ

@ Гейб тоже совершенно прав - попробуйте это на другом компьютере, который не находится за брандмауэром или прокси-сервером.

Мой рабочий ПК находился за прокси-сервером, поэтому для выполнения HTTP-вызовов на основе REST мне нужно было сделать следующее:

var proxyObject = new System.Net.WebProxy("http://myDomain:8080/", true);
System.Net.WebRequest req = System.Net.WebRequest.Create("http://www.someapi.com/");
req.Proxy = proxyObject;
proxyObject.Credentials = New System.Net.NetworkCredential("domain\username","password")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...