Не получается отправить POST-запрос из-за SSL

black_ice

Новичок
Не получается отправить POST-запрос из-за SSL

Нужно в зависимости от времени (по крону, допустим), менять скорость спутникового инета. Т.е. днем ставить меньше, а ночью - больше.
Делается все это дело в админке (https://customer.spectrumsat.net/speed/), вручную все ок, но POST почему-то не проходит, подозреваю, что из-за SSL сертефиката, который необходимо "принять".

Подскажите, как эту проблему разрулить?

PHP:
<?php

$login = "speeds4";
$pass  = "speeds44";
$speed = "6";

$buffer = "";

$fp = fsockopen("customer.spectrumsat.net", 80, $errno, $errstr, 30);
if (!$fp) 
{
   echo "$errstr ($errno)<br />\n";
} 
else 
{
   $out  = "POST /speed/ HTTP/1.1\r\n";
   $out .= "Host: customer.spectrumsat.net\r\n";
   $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
   $out .= "Authorization: Basic ".base64_encode($login.':'.$pass)."\r\n";
   $out .= "Content-Length: 9\r\n\r\n";
   $out .= "KEY=1\r\n";
   $out .= "S=$speed";

   fwrite($fp, $out);
   while (!feof($fp)) 
   {
       $buffer .= fgets($fp);
	   
   }
   fclose($fp);
   echo "<pre>$out </pre>";
   echo "<pre><br><br><br>$buffer</pre>";
}

?>
 

SiMM

Новичок
> Поменял на 443, выдает Maximum execution time of 30 seconds exceeded.
Файрвол?
 

Активист

Активист
Команда форума
Wicked
Ну если его только в черный список внесли и закрыли на фаирволе. При этом только 443 порт закрыли, при этом 80 оставив (что мало вероятно).
Не будем гадать, выслушаем его.
 

kamatoz

Новичок
Активист
фаервол на его стороне имеется в виду, а не на стороне сервера.
 

Alexandre

PHPПенсионер
фаервол на его стороне имеется в виду, а не на стороне сервера.
маловероятно, так как он обращался по https через браузер.

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


плюс здесь еще надо реализовать Basic Autentification

пусть всем этим займется курл.

еще замеу, что многие "умные" сайты смотрят такие заголовки как
реферер
куки
е-тагс
 

Gorynych

Посетитель PHP-Клуба
Re: Не получается отправить POST-запрос из-за SSL

Автор оригинала: black_ice
... вручную все ок, но POST почему-то не проходит, подозреваю, что из-за SSL сертефиката, который необходимо "принять".
может CURL?

PHP:
// Use CURL:
$url = "https://your_url";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// allow redirects
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // times out after 31s
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // FALSE to stop CURL from verifying the peer's certificate
curl_setopt($ch, CURLOPT_POST, 1); // set POST method
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // add POST fields
$result = curl_exec($ch); // run the whole process

if ( $result === false )
    echo "<br>" . curl_error($ch) . "(" . curl_errno($ch) . ")";
else
    echo $result;

curl_close($ch);
 

black_ice

Новичок
Курлом не хотел пользоваться из-за того, что не везде стоит. Хотя вроде удобная штука. :)

Спасибо Горынычу.

ЗЫ только там еще надо было добавить
Код:
curl_setopt($ch, CURLOPT_USERPWD, $login.':'.$pass);
еще немного удивило, что он автоматом перегоняет эти данные в base64, т.е. вначале писал
Код:
curl_setopt($ch, CURLOPT_USERPWD, base64_encode($login.':'.$pass));
и выдавало 401 Unauthorized.
 

Wicked

Новичок
black_ice
еще более удивительно, что если уж он берет на себя base64, то почему бы вообще не принимать CURLOPT_USER и CURLOPT_PWD отдельно.
 
Сверху