fsocket - POST (протестите)

Статус
В этой теме нельзя размещать новые ответы.

Coffin

Новичок
fsocket - POST (протестите)

вообщем вот что я имею :)
//a.php
PHP:
<?
if(isset($_POST['a'])){
echo "YES,BABY";
}
else{
echo "ohhh,shit";
}

?>
//index.php
PHP:
<?
$s = fsockopen( "coffin", 80 );
if (!$s){
echo "Can't do -> fsockopen()";
}
else{
$post = "POST http://coffin/a.php HTTP/1.0\n
Host: coffin\n
Referer: http://coffin/index.php\n
Content-Type: application/x-www-form-urlencoded\n
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)\r\n
Connection: Closes
Content-Length: 1\n
a=aaa\n\n";

if(!fwrite( $s, $post )){
        echo "Can't do -> fwrite()";
}
else{

  echo "fwrite() ok -><br>";

  while (!feof($s)) {
       echo fgets($s, 4096)."<br>";
   }
}

fclose( $s );
}
?>
Вроде бы все должно работать...
но что я получаю в итоге
fwrite() ok ->
HTTP/1.1 200 OK
Date: Mon, 31 Oct 2005 01:57:58 GMT
Server: Apache/1.3.31 (Win32)
X-Powered-By: PHP/4.3.11
Connection: close
Content-Type: text/html

ohhh,shit
Так вот и не могу понять какого черта она не передается :(
 

berkut

Новичок
А если Content-Length: 7
?

-~{}~ 31.10.05 08:38:

аа, после Content-Length должна быть пустая строка: \r\n\r\na=aaa\n\n
 

kruglov

Новичок
Coffin
Возьмите просмотрщик заголовков какой-нить и посмотрите, что шлет реальный браузер, а потом исправьте у себя опечатки.
 

Coffin

Новичок
Поставил плагин на файрфокс для просмотра заголовков.
Исправилась переменная $post на вот что

PHP:
$post ="POST /a.php HTTP/1.1\n
Host: coffin\n
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7\n
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\n
Accept-Language: ru-ru,ru;q=0.5\n
Accept-Encoding: gzip,deflate\n
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\n
Keep-Alive: 300\n
Connection: keep-alive\n
Referer: http://coffin/index3.php\n
Content-Type: application/x-www-form-urlencoded\n
Content-Length: 4\n
a=sd";
и вот что я получаю в итоге

fwrite() ok ->
HTTP/1.1 400 Bad Request
Date: Mon, 31 Oct 2005 07:22:55 GMT
Server: Apache/1.3.31 (Win32)
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1

16b




Bad Request

Your browser sent a request that this server could not understand.


client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /a.php



Apache/1.3.31 Server at coffin Port 80



0
кто-нибудь понимает что за фигня творится ? :)
 

Coffin

Новичок
так как в мануале формирования заголовка так написано.
А как по вашему надо сделать ?

Кстати я вот что еще нашел. Если HTTP/1.1 заменить на HTTP/1.0,то опять вылазит первый вариан

ктому же причем там перевод строки , если он говорит что имя хоста не передано, хотя оно передается.

П.С. Можно ты :)
 

kruglov

Новичок
Coffin

В мануале так не написано, читайте внимательнее.
Как сделать?

Например, так:
PHP:
$post ="POST /a.php HTTP/1.1
Host: coffin
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7
...";
p. s. Вроде мы не супруги, на "ты"...
 

Coffin

Новичок
ну если так написать, то ничего не происходит...

П.С. ну давайте на Вы.

-~{}~ 31.10.05 11:45:

Вообщем рассказываю как я сделал...
//a.php остался неизменным
PHP:
<?
if(isset($_POST['a'])){
echo "YES,BABY";
}
else{
echo "ohhh,shit";
}

?>
//index.php меняется значительно :) вместо fsocketopen и тд использую curl_...

PHP:
<?
error_reporting(E_ALL);
ini_set('display_errors', 1);


$url="http://coffin/a.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, "a=asd&");
#curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$store = curl_exec ($ch);
$content = curl_exec ($ch); # This returns HTML
echo $content;
curl_close ($ch);


?>
имеем в результате
П.С. Но хотелось бы всеравно узнать как с сокетами сделать. Может найдутся умельцы :rolleyes:
 

Steamroller

Новичок
$post = "POST http://coffin/a.php HTTP/1.0\n
Host: coffin\n
Referer: http://coffin/index.php\n
Content-Type: application/x-www-form-urlencoded\n
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)\r\n
Connection: Closes
Content-Length: 1\n
a=aaa\n\n";
Исправь на:
$post = "POST /a.php HTTP/1.1\r\n
Host: coffin\r\n
Referer: http://coffin/index.php\r\n
Content-Type: application/x-www-form-urlencoded\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)\r\n
Connection: Close\r\n\r\n
a=aaa\n\n";
 

kruglov

Новичок
Coffin
Умельцев хоть отбавляй, но они в курсе, что чудес не бывает, а бывают ошибки программистов...

Лично я, как мне кажется, уже указал на методы определения правильного решения и даже подал дополнительную умную мысль касательно переводов строк.

Больше мне нечего добавить.
 

white phoenix

Новичок
Автор оригинала: Coffin
исправляй не исправляй , а сокеты не пашут :)
задорнов отдыхает. если у тебя хоть что-то отображается значит сокеты работают нормально, т.к. сокетами плевать как у тебя там запрос. Советую просто посмотреть какой запрос шлет броузер и сделать такой же.
 

Coffin

Новичок
Автор оригинала: white phoenix
задорнов отдыхает. если у тебя хоть что-то отображается значит сокеты работают нормально, т.к. сокетами плевать как у тебя там запрос. Советую просто посмотреть какой запрос шлет броузер и сделать такой же.
ну для меня коли нет желамемого результат, то и не пашет значит...
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху