gpt4 book ai didi

c++ - "400 Bad request"使用 OpenSSL BIO 请求时

转载 作者:行者123 更新时间:2023-11-28 01:37:01 26 4
gpt4 key购买 nike

我正在尝试使用 C++ 的 OpenSSL 连接到我的网站,这就是我所拥有的:

#include "openssl/ssl.h"
#include "openssl/bio.h"
#include "openssl/err.h"

#include <string>

int main( )
{
BIO * bio;
int p;

char * request = (char*)"GET / HTTPS/1.1\x0D\x0AHost: (website)/auth.php\x0D\x0A\x43onnection: Close\x0D\x0A\x0D\x0A";
char r[ 1024 ];

ERR_load_BIO_strings( );
SSL_load_error_strings( );
OpenSSL_add_all_algorithms( );

bio = BIO_new_connect( "(website):80" );
if ( bio == NULL )
{
printf( "BIO is null\n" ); return 0;
}

if ( BIO_do_connect( bio ) <= 0 )
{
ERR_print_errors_fp( stderr );
BIO_free_all( bio );
return 0;
}

BIO_write( bio, request, strlen( request ) );

while(true)
{
p = BIO_read( bio, r, 1023 );
if ( p <= 0 ) break;
r[ p ] = 0;
printf( "%s", r );
}

BIO_free_all( bio );
system( "pause" );
return 0;
}

当我运行它时,我得到这个错误:

HTTP/1.0 400 Bad request
Cache-Control: no-cache
Connection: close
Content-Type: text/html

<html><body><h1>400 Bad request</h1>
Your browser sent an invalid request.
</body></html>
Press any key to continue . . .

该网站有一个 ssl 证书,每当我尝试连接到主站点时,它都会说它已被移动到同一个域,但前面有一个 https://而不是 http://。

在我进入我的网站的地方,前面有 www,当然后面还有 tld。如您所见,我正在尝试读取 PHP 脚本,所以如果有人知道我如何解决这个问题,我将不胜感激。

最佳答案

char * request = (char*)"GET / HTTPS/1.1\x0D\x0AHost: (website)/auth.php\x0D\x0A\x43onnection: Close\x0D\x0A\x0D\x0A";

更改为:

const char request[] = "GET /auth.php HTTP/1.1\r\n"
"Host: www.example.com\r\n"
"Connection: Close\r\n\r\n";

(感谢 Sam Varshavchik 和 Lightness Races in Orbit catch HTTPS/1.1)。


bio = BIO_new_connect( "(website):80" );

更改为:

bio = BIO_new_connect( "www.example.com:443" );

您可能还对 SSL/TLS Client 感兴趣在 OpenSSL 维基上。您似乎缺少我希望看到的东西,例如 SSL_CTX_newBIO_set_conn_hostnameSSL_set_tlsext_host_nameBIO_do_handshake 和其他几个.

以后请停止编辑重要信息,例如(website)。没有人可以在缺少信息的情况下复制您的问题。

C++ 可以使 OpenSSL 的使用更加容易。您可以使用 unique_ptr 避免显式调用 EVP_CIPHER_CTX_free 等函数。有关一些 C++ 示例,请参阅 EVP Symmetric Encryption and Decryption | C++ Programs在 OpenSSL wiki 上,unique_ptr and OpenSSL's STACK_OF(X509)* , How to get PKCS7_sign result into a char * or std::string

关于c++ - "400 Bad request"使用 OpenSSL BIO 请求时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48846976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com