【问题标题】:Connect through HTTPS instead of HTTP通过 HTTPS 而不是 HTTP 连接
【发布时间】:2012-11-16 09:20:04
【问题描述】:

我想使用一个简单的 API,并且我想以安全的方式来做。 它目前正在使用套接字和端口 80。据我所知,端口 80 是打开的,而且它似乎不是一个安全的连接。

由于要发送的数据包含用户名和密码,我想使用 HTTPS 而不是 HTTP 来确保安全。

我想知道它是否像更改这一行那么简单;

$headers = "POST /api/api.php HTTP/1.0\r\n";

对于这一行

$headers = "POST /api/api.php HTTPS/1.0\r\n";

并将端口更改为443

这里是连接函数:

// api connect function
function api_connect($Username, $Password, $ParameterArray)
{
   // Create the URL to send the message.
   // The variables are set using the input from an HTML form

   $err = array();
   $url = "api.text-connect.co.uk";
   $headers = "POST /api/api.php HTTP/1.0\r\n";
   $headers .= "Host: ".$url."\r\n";

   // Create post string
   // Username and Password
   $poststring = "Username=".$Username."&";
   $poststring .= "Password=".$Password;

   // Turn the parameter array into the variables

   while (list($Key, $Value)=@each($ParameterArray))
   {
      $poststring .= "&".$Key."=".urlencode($Value);
   }

   // Finish off the headers
   $headers .= "Content-Length: ".strlen($poststring)."\r\n";
   $headers .= "Content-Type: application/x-www-form-urlencoded\r\n";


   // Open a socket
   $http = fsockopen ($url, 80, $err[0], $err[1]);
   if (!$http)
   {
      echo "Connection to ".$url.":80 failed: ".$err[0]." (".$err[1].")";
      exit();
   }

   // Socket was open successfully, post the data.
   fwrite ($http, $headers."\r\n".$poststring."\r\n");

   // Read the results from the post
   $result = "";
   while (!feof($http))
   {
      $result .= fread($http, 8192);
   }

   // Close the connection
   fclose ($http);

   // Strip the headers from the result
   list($resultheaders, $resultcode)=split("\r\n\r\n", $result, 2);

   return $resultcode;
}
?>

【问题讨论】:

    标签: php http post https protocols


    【解决方案1】:

    我想知道是不是这么简单

    不,不是。真的,真的不是。

    HTTPS 是通过 SSL 建立的 HTTP 隧道。因此,您根本不会更改 HTTP 请求的内容。

    您确实需要在执行 HTTP 之前执行所有 SSL 握手。

    SSL 是加密的,因此很难。不要试图重新发明这个轮子。使用诸如cURL 之类的库。

    【讨论】:

    • 我如何使用 cURL 库来达到这个目的?
    • 使用 cURL 的教程超出了 stackoverflow 答案的范围。它的文档很不错。
    • 那么,我不能用这个功能吗?我应该创建另一个不同的吗?这是我正在尝试使用的系统官方网站上提供的一个:text-connect.co.uk/dev/php/send_message.txt
    • 正确(嗯,大部分情况下,它的一部分是可重复使用的)。是的。在应用程序级代码中使用套接字执行 HTTP 很疯狂:存在 HTTP 库。
    【解决方案2】:

    curl 并设置CURLOPT_SSL_VERIFYPEER = false

    【讨论】:

    • 是的。你能检索到想要的结果吗?任何问题'
    【解决方案3】:

    无论是使用 HTTP 还是 HTTPS,您的代码都存在大量问题 - 实现 HTTP 客户端(或服务器)比简单地通过套接字抛出一些标头然后接收响应要复杂得多。

    这种方法特别糟糕的是,它有时会起作用 - 然后它会失败,您将不明白为什么。

    使用 curl 重新开始

    这样做您只需要更改 URL(它还实现了 cookie jar、支持标头注入、自动跟踪重定向、通过代理路由、验证或不验证 SSL 证书等)。

    【讨论】:

      猜你喜欢
      • 2014-11-20
      • 2017-06-01
      • 1970-01-01
      • 2016-04-08
      • 2019-11-21
      • 1970-01-01
      • 2011-07-20
      • 2021-07-16
      • 2014-08-06
      相关资源
      最近更新 更多