Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过HTTPS而不是HTTP进行连接_Php_Http_Post_Https_Protocols - Fatal编程技术网

Php 通过HTTPS而不是HTTP进行连接

Php 通过HTTPS而不是HTTP进行连接,php,http,post,https,protocols,Php,Http,Post,Https,Protocols,我想使用一个简单的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,我想用一种安全的方式。 它目前正在使用套接字和端口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;
}
?>
我想知道是不是这么简单

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

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

不过,在执行HTTP操作之前,确实需要执行所有SSL握手

SSL是加密的,因此很难实现。不要试图重新发明这个轮子。使用库,例如

我想知道是不是这么简单

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

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

不过,在执行HTTP操作之前,确实需要执行所有SSL握手

SSL是加密的,因此很难实现。不要试图重新发明这个轮子。使用库,例如。

并设置
CURLOPT\u SSL\u VERIFYPEER=false


设置
CURLOPT\u SSL\u VERIFYPEER=false

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

这种方法特别糟糕的是,它会在某些时候起作用——然后它会失败,你不会理解为什么

使用curl重新开始


通过这种方式,您只需更改URL(它还实现了cookie jar、对标头注入的支持、重定向的自动跟踪、通过代理路由、SSL证书的验证或非验证等).

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

这种方法特别糟糕的是,它会在某些时候起作用——然后它会失败,你不会理解为什么

使用curl重新开始


通过这种方式,您只需更改URL(它还实现了cookie jar、对标头注入的支持、重定向的自动跟踪、通过代理路由、SSL证书的验证或非验证等).

我如何使用cURL库来实现这一目的?关于使用cURL的教程超出了stackoverflow答案的范围。它的文档很不错。所以,我不能使用这个函数吗?我应该创建另一个不同的吗?这是我试图使用的系统的官方网站上提供的一个:Correct(大部分情况下,它的一部分是可重用的)。对在应用程序级代码中使用套接字进行HTTP是不正确的:存在HTTP库。我如何使用cURL库来实现此目的?使用cURL的教程超出了stackoverflow答案的范围。它的文档很不错。所以,我不能使用这个函数吗?我应该创建另一个不同的吗?这是我试图使用的系统的官方网站上提供的一个:Correct(大部分情况下,它的一部分是可重用的)。对在应用程序级代码中使用套接字执行HTTP是非常困难的:HTTP库存在。是的。您能够检索到所需的结果吗?有问题吗?是的,你能检索到想要的结果吗?有问题吗