473,218 Members | 1,661 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,218 software developers and data experts.

HTTP problem, wrong characters sent (HTTP pro's needed!)

Hey,

I am writing a file that reads in an external file in the web and
prints it out including the response header of the http protocol. I do
this to enable cross domain XMLHttpRequests.
I implemented it via fsockopen, like this:

<?
$url = $_REQUEST['uri']; // take the param as $uri
//... more ...
if ($c = fsockopen($host, $port, $errorNo, $errorStr, 5)) { //
connection
$headers = getallheaders(); // request headers
$h = ($headers['Content-Type'] ==
'application/x-www-form-urlencoded') ? 'POST' : 'GET'; // request
method
$h .= " $path HTTP/1.1\r\nHost: $host\r\n";
foreach ($headers as $name =$content) {
// don't forward user's (and your) cookies to external server!
if ($name == 'Accept')
$h .= 'Accept:
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*;q=0.5'."\r\n";
elseif ($name == 'Accept-Encoding')
$h .= 'Accept-Encoding: '."\r\n";
elseif ($name != 'Host' && $name != 'Connection' && $name !=
'Cookie')
$h .= $name.': '.$content."\r\n";
}
$h .= 'Connection: closed'."\r\n";
$h .= "\r\n";
// header sent

// post content
if ($_POST) {
$posts = array();
foreach ($_POST as $key =$value)
$posts[] = urlencode($key).'='.urlencode($value);
$h .= implode('&', $posts);
}
fwrite($c, $h);

// read and output results
$header = true;
while (!feof($c)) {
$p = fgets($c);
if ($p == "\r\n")
$header = false;
if ($header) {
if (strpos($p, 'Content-Type') !== false && $html)
header(str_replace('xml', 'html', $p));
else
header(trim($p));
}
else
echo $p;
}
}
fclose($c);
}
else
echo $errorNo.' '.$errorStr;
}
?>

^ Thats the code, test it in Firefox and IE:

http://aka-fotos.de/research/uniajax...esponseXml.php

It means that http.php reads the file
http://aka-fotos.de/research/uniajax/responseXml, a simple XML file
that looks like this:

<?xml version="1.0" encoding="utf-8"?><response>hello</response>

Firefox shows the correct source code, exactly the same as above ^, but
IE shows an error (cannot find the page). To get to the bottom auf
things I used Rex Swains HTTP viewer that shows me all headers of a
http request including the body of the page:
http://rexswain.com/httpview.html. If you paste in my adress -
http://aka-fotos.de/research/uniajax...esponseXml.php
- and submit the form, you will see that the response body looks like
this:

(CR)(LF)
26·(CR)(LF)
<?xml·version="1.0"·encoding="utf-8"?>(CR)(LF)
1b·(CR)(LF)
<response>hello</response>(LF)
(CR)(LF)
0(CR)(LF)
(CR)(LF)

(CR) and (LF) are control characters, forget them, but I see some
charakters "26" and "1b". This result differs from what Firefox shows,
can somebody say me whats going on there?

I hope somebody can help me!
Thanks,

Andi

Sep 27 '06 #1
3 2119
On 27 Sep 2006 08:56:56 -0700, "webEater" <an***********@gmx.dewrote:
>I am writing a file that reads in an external file in the web and
prints it out including the response header of the http protocol. I do
this to enable cross domain XMLHttpRequests.
I implemented it via fsockopen, like this:

<?
$url = $_REQUEST['uri']; // take the param as $uri
//... more ...
if ($c = fsockopen($host, $port, $errorNo, $errorStr, 5)) { //
connection
$headers = getallheaders(); // request headers
$h = ($headers['Content-Type'] ==
'application/x-www-form-urlencoded') ? 'POST' : 'GET'; // request
method
$h .= " $path HTTP/1.1\r\nHost: $host\r\n";
*klaxxon noises*

You are attempting to write an HTTP client yourself. You have made an HTTP/1.1
request, which means you _must_ implement some features as specified in the
specification to be able to decode the response, else it'll bite you.
> $h .= 'Connection: closed'."\r\n";
Not a valid value, you mean "close":
http://www.w3.org/Protocols/rfc2616/....html#sec14.10
> // read and output results
$header = true;
while (!feof($c)) {
$p = fgets($c);
if ($p == "\r\n")
$header = false;
if ($header) {
if (strpos($p, 'Content-Type') !== false && $html)
header(str_replace('xml', 'html', $p));
else
header(trim($p));
}
else
echo $p;
}
}

^ Thats the code, test it in Firefox and IE:

http://aka-fotos.de/research/uniajax...esponseXml.php

It means that http.php reads the file
http://aka-fotos.de/research/uniajax/responseXml, a simple XML file
that looks like this:

<?xml version="1.0" encoding="utf-8"?><response>hello</response>

Firefox shows the correct source code, exactly the same as above ^, but
IE shows an error (cannot find the page). To get to the bottom auf
things I used Rex Swains HTTP viewer that shows me all headers of a
http request including the body of the page:
http://rexswain.com/httpview.html. If you paste in my adress -
http://aka-fotos.de/research/uniajax...esponseXml.php
- and submit the form, you will see that the response body looks like
this:

(CR)(LF)
26·(CR)(LF)
<?xml·version="1.0"·encoding="utf-8"?>(CR)(LF)
1b·(CR)(LF)
<response>hello</response>(LF)
(CR)(LF)
0(CR)(LF)
(CR)(LF)

(CR) and (LF) are control characters, forget them, but I see some
charakters "26" and "1b". This result differs from what Firefox shows,
can somebody say me whats going on there?
26 and 1b are chunk sizes.

You haven't implemented HTTP/1.1 Content-transfer-encoding: chunked, which is
mandatory and very commonly used in HTTP/1.1 server replies.

http://www.w3.org/Protocols/rfc2616/....html#sec3.6.1

"All HTTP/1.1 applications MUST be able to receive and decode the "chunked"
transfer-coding, and MUST ignore chunk-extension extensions they do not
understand."

Some choices:

(1) Make HTTP 1.0 requests instead of 1.1.
(2) Implement chunked transfer-coding.
(3) Use an HTTP client library that understands it, for example cURL.

--
Andy Hassall :: an**@andyh.co.uk :: http://www.andyh.co.uk
http://www.andyhsoftware.co.uk/space :: disk and FTP usage analysis tool
Sep 27 '06 #2
Hi,

thank you, your notes helped me very much!
You haven't implemented HTTP/1.1 Content-transfer-encoding: chunked, which is
mandatory and very commonly used in HTTP/1.1 server replies.

http://www.w3.org/Protocols/rfc2616/....html#sec3.6.1

"All HTTP/1.1 applications MUST be able to receive and decode the "chunked"
transfer-coding, and MUST ignore chunk-extension extensions they do not
understand."

Some choices:

(1) Make HTTP 1.0 requests instead of 1.1.
(2) Implement chunked transfer-coding.
(3) Use an HTTP client library that understands it, for example cURL.
I took the first choice - taking v1.0 - it's simpler. Now it works
properly ,)

Sep 27 '06 #3
Hello,

on 09/27/2006 12:56 PM webEater said the following:
I am writing a file that reads in an external file in the web and
prints it out including the response header of the http protocol. I do
this to enable cross domain XMLHttpRequests.
I implemented it via fsockopen, like this:
I think you should not send headers that your HTTP client is not capable
of understanding.

Anyway, instead of reinventing the wheel, you may want to try this
proven HTTP client class:

http://www.phpclasses.org/httpclient
--

Regards,
Manuel Lemos

Metastorage - Data object relational mapping layer generator
http://www.metastorage.net/

PHP Classes - Free ready to use OOP components written in PHP
http://www.phpclasses.org/
Sep 28 '06 #4

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: Jerry | last post by:
I've found a problem with exec, passthru, shell_exec & system. I'm trying to run the following exec("sort -r -n -k2,2 r1.txt > r2.txt") with r1.txt being a numeric file. The file looks like...
7
by: Juul | last post by:
Hi, My hostingprovider just updated to PHP 4.4. Since that time I have problems using the mail() function in PHP. I can't send headers anymore and my provider don't know what's wrong. ...
1
by: Shahzad Atta | last post by:
Hi there, My web server needs to get html source of a web page from a remote web server . This html will be rendered to client browser after some processing. I know it can be done via XMLHTTP...
1
by: Andrea | last post by:
I was trying to deserialize my xml file (I enclose it below ) into a class. So I generated an xsd file given my xml using the MS xsd tool; then I generated the corresponsing C# class (using the MS...
8
by: Andreas Klemt | last post by:
Hello, I get this error Message "cannot redirect after http headers have been sent" when I do this response.redirect ("home.aspx") How can I find out with vb.net if already a http header has...
6
by: Andreas Klemt | last post by:
Hello, I get this error Message "cannot redirect after http headers have been sent" when I do this response.redirect ("home.aspx") How can I find out with vb.net if already a http header has...
4
by: batista | last post by:
Hi there, My problem is that, i've created a simple hello world web service project, and then, when i run it to test the operation,the invoke button does not open any window. I mean there is...
0
by: seven.su | last post by:
I am trying to streaming back a xls file in page render event and this has been working properly in .net 1.1. But now I got 'Server cannot set content type after HTTP headers have been sent' under...
5
by: gibble | last post by:
Hi, I am going crazy. We get a hundred or so of these errors each day and while the fix would seem obvious, the error does not include a line number! -------------------- Process...
1
isladogs
by: isladogs | last post by:
The next online meeting of the Access Europe User Group will be on Wednesday 6 Dec 2023 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, Mike...
0
by: VivesProcSPL | last post by:
Obviously, one of the original purposes of SQL is to make data query processing easy. The language uses many English-like terms and syntax in an effort to make it easy to learn, particularly for...
3
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 3 Jan 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). For other local times, please check World Time Buddy In...
0
by: jianzs | last post by:
Introduction Cloud-native applications are conventionally identified as those designed and nurtured on cloud infrastructure. Such applications, rooted in cloud technologies, skillfully benefit from...
2
by: jimatqsi | last post by:
The boss wants the word "CONFIDENTIAL" overlaying certain reports. He wants it large, slanted across the page, on every page, very light gray, outlined letters, not block letters. I thought Word Art...
2
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 7 Feb 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:30 (7.30PM). In this month's session, the creator of the excellent VBE...
0
by: fareedcanada | last post by:
Hello I am trying to split number on their count. suppose i have 121314151617 (12cnt) then number should be split like 12,13,14,15,16,17 and if 11314151617 (11cnt) then should be split like...
0
by: stefan129 | last post by:
Hey forum members, I'm exploring options for SSL certificates for multiple domains. Has anyone had experience with multi-domain SSL certificates? Any recommendations on reliable providers or specific...
0
Git
by: egorbl4 | last post by:
Скачал я git, хотел начать настройку, а там вылезло вот это Что это? Что мне с этим делать? ...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.