Помогите с fsockopen, кто знаком...

W
На сайте с 19.06.2006
Offline
142
744

Значит, задача такая -отправить данные методом пост POST с одного сервера на другой.

Почитал, посмотрел - нашел пример. Переделал под себя, вот что получилось:

Источник данных:


if ($row=mysql_fetch_array($result)) {
$sat_url = $row['sat_url'];
$sat_db_host = $row['sat_db_host'];
$sat_db_name = $row['sat_db_name'];
$sat_db_user = $row['sat_db_user'];
$sat_db_pass = $row['sat_db_pass'];
$sat_shell_url = $row['sat_shell_url'];
}

$post_query = "q=Needle_QUERY";
$post_query = urlencode($post_query);
$host = $sat_url;
$path = '/'.$sat_shell_url;

$fp = fsockopen($host, '80');
if ($fp) {
fputs($fp, 'POST '.$path." HTTP/1.0\r\nHost: ".$host."\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, 'Content-length: '. strlen($post_query) ."\r\n\r\n");
fputs($fp, $post_query);
} else {die ('Ошибка обработки');}
fclose ($fp);

На приёмнике:


$q = urldecode($_REQUEST['q']);
$fp = fopen('a.txt', 'w+t');
if (strlen($q) <1) $q="Void string!";
fwrite($fp, $q);
fclose($fp);

В файл пишется "Void string!", т.е. данные не передаются... Кто ткнет носом?

Заранее thx :)

Shtogrin
На сайте с 02.11.2006
Offline
95
#1

1) urlencode съест символ = для $post_query, а надо только данные urlencode

2) добавить Connection: close

fputs($fp, 'Content-length: '. strlen($post_query) ."\n");

fputs($fp, "Connection: close \n\n");

fputs($fp, $post_query);

www.shtogrin.com (http://www.shtogrin.com/). Канцтовары (http://www.invit.com.ua/). 1С Бухгалтерия (http://account.kiev.ua/).
Dreammaker
На сайте с 20.04.2006
Offline
569
#2
Shtogrin:
1) urlencode съест символ = для $post_query, а надо только данные urlencode

Присоединяюсь :)


q%3DNeedle_QUERY
W
На сайте с 19.06.2006
Offline
142
#3

thx, не помогло. Пришлось юзать написанный класс. :)

diмa5ty
На сайте с 26.12.2006
Offline
17
#4

а print_r($_POST) и print_r($_SERVER) на приёмнике что говорит?

бла бла бла
Dreammaker
На сайте с 20.04.2006
Offline
569
#5
wayly:
thx, не помогло.

класс классом. Но, скорее всего, Вы что-то не поняли. :)


$sat_url = 'site';
$sat_shell_url = '/test/fstest.php';
$query = urlencode('Needle_QUERY');
$post_query = "q=".$query;
$host = $sat_url;
$path = '/'.$sat_shell_url;

$fp = fsockopen($host, '80');
if ($fp) {
fputs($fp, 'POST '.$path." HTTP/1.0\r\nHost: ".$host."\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, 'Content-length: '. strlen($post_query) ."\r\n\r\n");
fputs($fp, $post_query);
} else {die ('Ошибка обработки');}
fclose ($fp);

Вот это у меня работает. А ваш вариант (есесно без запроса к базе) выдавал тот же результат, что и у Вас.

K
На сайте с 24.03.2004
Offline
223
#6

в конце запроса переводы строки есть?

проверенная ддос защита (http://ddos-protection.ru) -> http://ddos-protection.ru (http://ddos-protection.ru), бесплатный тест, цена от размера атаки не зависит.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий