HttpWebRequest headers problem

D

Dunc

Hi,

I'm using a c# app to download zipped XML data from a 3rd party. All is
good, but the XML is generated on the remote machine at the time of request
(hence the huge timeout), and when it sends me the file, it has an error
message appended to the beginning:

ÿþ<br />
<b>Warning</b>: HTTP_USER_AGENT variable is not set, cannot determine user
agent name in <b>/home/sites/site2/web/check_auth.inc.php</b> on line
<b>19</b><br />

I can successfully get the file if I do it manually through IE, so it's not
a problem on the client end. I've tried adding the HTTP_USER_AGENT header
to the request object, but no luck getting rid of it. How do I add the
correct request headers here? I've put the code (which is pretty simple)
below.

Thanks in advance,

Dunc

---/ snip /---

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strRemoteURI);

// Set some reasonable limits on resources used by this request
request.MaximumAutomaticRedirections = 4;
request.MaximumResponseHeadersLength = 64;
request.Timeout = 600000;

// Set credentials to use for this request.
request.Credentials = CredentialCache.DefaultCredentials;
request.Headers.Add("HTTP_USER_AGENT", "IE");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

// Get the stream associated with the response.
Stream receiveStream = response.GetResponseStream();

// Pipes the stream to a higher level stream reader with the required
encoding format.
StreamReader readStream = new StreamReader (receiveStream,
System.Text.Encoding.Unicode);
StreamWriter writeStream = new StreamWriter("_" + strFileName, false,
System.Text.Encoding.Unicode);

writeStream.Write(readStream.ReadToEnd());
writeStream.Flush();

response.Close();
readStream.Close();
writeStream.Close();
 
J

Joerg Jooss

Dunc said:
Hi,

I'm using a c# app to download zipped XML data from a 3rd party. All
is good, but the XML is generated on the remote machine at the time
of request (hence the huge timeout), and when it sends me the file,
it has an error message appended to the beginning:

ÿþ<br />
<b>Warning</b>: HTTP_USER_AGENT variable is not set, cannot
determine user agent name in
<b>/home/sites/site2/web/check_auth.inc.php</b> on line <b>19</b><br
/>

I can successfully get the file if I do it manually through IE, so
it's not a problem on the client end. I've tried adding the
HTTP_USER_AGENT header to the request object, but no luck getting rid
of it. How do I add the correct request headers here? I've put the
code (which is pretty simple) below.
[...]

HTTP_USER_AGENT is a probably a CGI variable, but not a HTTP header name.
Use
HttpWebRequest.UserAgent to set the user agent.

And "IE" is not a proper user agent string. Try
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"
-- that's IE 6 SP2 on Win XP SP2.
---/ snip /---

HttpWebRequest request =
(HttpWebRequest)WebRequest.Create(strRemoteURI);

// Set some reasonable limits on resources used by this request
request.MaximumAutomaticRedirections = 4;
request.MaximumResponseHeadersLength = 64;
request.Timeout = 600000;

// Set credentials to use for this request.
request.Credentials = CredentialCache.DefaultCredentials;
request.Headers.Add("HTTP_USER_AGENT", "IE");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

// Get the stream associated with the response.
Stream receiveStream = response.GetResponseStream();

// Pipes the stream to a higher level stream reader with the required
encoding format.
StreamReader readStream = new StreamReader (receiveStream,
System.Text.Encoding.Unicode);
StreamWriter writeStream = new StreamWriter("_" + strFileName, false,
System.Text.Encoding.Unicode);

Ouch! Don't use Readers and Writers to handle binary content.

Cheers,
 
J

Jon Skeet [C# MVP]

Dunc said:
I'm using a c# app to download zipped XML data from a 3rd party. All is
good, but the XML is generated on the remote machine at the time of request
(hence the huge timeout), and when it sends me the file, it has an error
message appended to the beginning:

HTTP_USER_AGENT isn't the header name, it's User-Agent.

Use the UserAgent property of HttpWebRequest to set it.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top