开发者

C# WebRequest won't work with this link from LinkShare

This is driving me a bit nuts. I am trying to do something quite simple, and I have done it many times before. Just trying to call a REST API.

I am trying to call GetMessage with endpoint = "http://feed.linksynergy.com/productsearch?token=717f8c8511725ea26fd5c3651f32ab187d8db9f4b208be781c292585400e682d&keyword=DVD", and it keeps returning empty string. If I pass it any other valid URL, it will work. But if I just copy and paste the original URL into the web browser, it returns fine!

Can any smart developer tell me what's going on?

Code below. Thanks in advance.

James

public string GetMessage(string 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;
        }
    }

private HttpWebRequest CreateWebRequest(string endPoint) { var request = (HttpWebRequest)WebRequest.Create(endPoint);

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

        return request;
  }


Not sure why your setting ContentLength/ContentType - that is generally for HTTP POST, where there is a request body for which you write data to via a stream.

This is a HTTP GET, so there is no request body. (just URI w/ query string)

This should work:

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());  
}

EDIT

@Gabe is also quite right - try this on another computer, that is isn't behind any kind of firewall/proxy server.

My work PC was behind a proxy server, so in order to make REST-based HTTP calls, i needed to do this:

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")
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜