Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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
Node.js 在节点JS中发送低级原始HTTP/HTTPS请求_Node.js_Sockets_Http_Ssl_Https - Fatal编程技术网

Node.js 在节点JS中发送低级原始HTTP/HTTPS请求

Node.js 在节点JS中发送低级原始HTTP/HTTPS请求,node.js,sockets,http,ssl,https,Node.js,Sockets,Http,Ssl,Https,我正在编写一个拦截代理工具,比如安全测试。其中一个重要部分是发送格式错误的HTTP请求,在这种情况下,我们必须让用户完全控制请求 所以,我不能在使用库时完全控制它!我需要能够向目标主机发送原始HTTP请求,比如 GET / HTTP/1.1 Host: google.com 我的尝试:- 我尝试使用节点JS,我能够连接到端口80(HTTP)上的主机,并且在连接到端口443(HTTPS)时,建立了连接,但返回空响应 在一些研究中,我发现这与SSL有关,因为我尝试了telnet,HTTPS连接也失

我正在编写一个拦截代理工具,比如安全测试。其中一个重要部分是发送格式错误的HTTP请求,在这种情况下,我们必须让用户完全控制请求

所以,我不能在使用库时完全控制它!我需要能够向目标主机发送原始HTTP请求,比如

GET / HTTP/1.1
Host: google.com
我的尝试:- 我尝试使用节点JS,我能够连接到端口80(HTTP)上的主机,并且在连接到端口443(HTTPS)时,建立了连接,但返回空响应

在一些研究中,我发现这与SSL有关,因为我尝试了telnet,HTTPS连接也失败了,通过查看一些stackoverflow答案

是否有任何选项可以直接从节点应用程序发送原始HTTP/HTTPS请求

谢谢

有一个模块,允许编写文本http消息,如-

const net=require('net'))
const HTTPTag=require('http-tag')
const socket=net.createConnection({
主机:“localhost”,
港口:8000,
}, () => {
//当套接字连接时,此回调运行一次
//而不是像这样手动编写:
//socket.write('GET/HTTP/1.1\r\n')
//socket.write('My-Custom-Header:Header1\r\n\r\n')
//您可以这样写请求(或响应):
const xHeader='Header1'//在epressions中,您可以传递所需的任何字符
socket.write(
HTTPTag`
GET/HTTP/1.1
我的自定义头:${xHeader}
`
)
socket.end()
})
socket.on('close',hasError=>console.log('socket Closed,hasError:${hasError}'))
//设置可读流编码
socket.setEncoding('utf-8')
socket.on('data',data=>console.log(data))

关于TLS,目前我正在研究内置节点模块,我还没有查看TLS。

尝试使用模块进行HTTPS请求。嘿,很抱歉延迟响应,但我有一个部分工作的代码,我无法使用TLS模块进行HTTP请求,但可以进行HTTPS请求!事实上,这是正确的,
net
模块是未加密的TCP,
tls
模块是加密的TCP(即tls)。您必须使用这两个模块来发出HTTP/HTTPS请求:
net
用于HTTP,而
tls
用于HTTPS。感谢您提供的信息!)嘿但我的要求是将原始请求发送到远程服务器,但我无法从库中确定如何做到这一点。我想如果你能对你使用过的
socket
对象进行更多的分析,我会更加理解:)我的答案涉及到发送格式错误的http请求的一部分,当你想要控制你发送的内容时,最终,不管你使用的是什么传输层协议-TCP或TCP上的TLS,你都需要这个,如果你还没有这样的东西。我将编辑答案以提供有关如何打开套接字和发送请求的信息,您可以在express server上进行测试。哇,这是一个极好的解决方案✨! 我目前能够发送HTTP请求并接收它们的响应,我想知道是否有类似的方式发出HTTPS请求?我尝试使用TLS模块,但当我连接到google.com时,我收到一个自签名证书错误。这是密码!有什么想法吗?:)我目前在选项中设置了
servername:'google.com'
,它可以在文档中找到-如果我没有误解背后的想法,就是,有时在同一台服务器下提供多个主机名,因此此选项指定您的客户机期望的主机证书。文档中也写了同样的内容-好吧,尽管如此,我误解了
servername
选项:)这是文档中的一个注释-多主机服务器可以使用它来选择要呈现给客户端的正确证书,它由服务器使用,而不是由客户端使用:)