当前位置: 首页 > 知识库问答 >
问题:

(Web)套接字连接发送头而不是字符串

郗欣嘉
2023-03-14

我正在研究一个刮刀,它通过Chrome延伸部分工作。它抓取页面上的所有超文本标记语言,并将其发送到过滤和保存数据的python代码。我这样做刮擦的原因是因为网站有蒸馏网络和一个“传统”刮刀被阻止。

我成功地连接了这两个代码,但每当我尝试向python服务器发送“Test”时,它只输出浏览器的标题。

b'GET/HTTP/1.1主机:localhost:18364连接:升级Pragma:no-cache-cache-Control:no-cache-User-Agent:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/78.0.3904.108 Safari/537.36升级:websocket来源:Chrome-extension://ocplnbpkkcpcomkjioockgnlohhkdeic Sec WebSocket版本:13接受编码:gzip,deflate,br接受html" target="_blank">语言:nl nl,nl;q=0.9,在美国;q=0.8,en;q=0.7秒WebSocket密钥:SDC7zPgHK/eV QRSJy0DZQ==秒WebSocket扩展:permessage deflate;客户端\u最大\u窗口\u位'

JavaScript代码(客户端):

chrome.runtime.onMessage.addListener(function(request, sender) {
if (request.action == "getSource") {
  var pageAmount = parseInt(request.source, 10)

  var allHTML = ""
  var BaseURL = "https://www.funda.nl/huur/rotterdam/p"

  function encode_utf8(s) {
    return unescape(encodeURIComponent(s));
  }

  var websocket = new WebSocket('ws://localhost:18364');

  websocket.onopen = function () {
    data = encode_utf8('Test.')
    websocket.send('Test.'); 
  };
message.innerText = request.source;
}
});

function onWindowLoad() {

var message = document.querySelector('#message');

chrome.tabs.executeScript(null, {
file: "getPageContent.js"
}, function() {
// If you try and inject into an extensions page or the         webstore/NTP you'll get an error
if (chrome.runtime.lastError) {
  message.innerText = 'There was an error injecting script : \n' + chrome.runtime.lastError.message;
}
});
}

window.onload = onWindowLoad;

Python代码(服务器):

import socket

LocalSocket = socket.socket()
allHTML = ''

try:  # Connecting the Socket
LocalSocket = socket.socket(socket.AF_INET,     socket.SOCK_STREAM)
LocalSocket.setsockopt(socket.SOL_SOCKET,   socket.SO_REUSEADDR, 1)
LocalSocket.bind(('localhost', 18364))
print("Connected.")
except socket.error as err:
print("ConnectionError: %s" % err)


def main():
LocalSocket.listen(1)

c, addr = LocalSocket.accept()
print('Got connection from', addr)
print(c.recv(1024))

c.close()

if __name__ == "__main__":
main()

共有1个答案

子车海
2023-03-14

web套接字是在HTTP上分层的,因此这是预期的行为。您需要一个web服务器(或说HTTP的东西)来处理连接:升级升级:websocket部分,然后在获得支持双向通信的有效连接之前执行其余握手

您可以看看如何使用websockets包,它很好地包装了这一点

 类似资料:
  • 问题内容: 我如何使用getOutputStream方法发送一个strin。正如他们提到的,它只能发送字节。到目前为止,我可以发送一个字节。但不是字符串值。 提前致谢 问题答案: 如何使用PrintWriter: 编辑 :找到了我自己的答案,看到讨论了一个改进,但未列出。这是使用OutputStreamWriter编写字符串的更好方法:

  • 问题内容: 我正在编写一个TCP服务器,可能需要15秒钟或更长时间才能开始生成对某些请求的响应主体。如果响应需要几秒钟才能完成,则某些客户端希望在其末端关闭连接。 由于生成响应非常占用CPU,因此我宁愿在客户端关闭连接时立即停止任务。目前,直到我发送第一个有效载荷并收到各种挂断错误后,我才发现这一点。 如何检测对等端已关闭连接而没有发送或接收任何数据?这意味着所有数据都保留在内核中,或者实际上没有

  • 问题内容: 我有两个脚本,Server.py和Client.py。我有两个目标: 为了能够一次又一次地从客户端向服务器发送数据。 为了能够将数据从服务器发送到客户端。 这是我的Server.py: 这是我的客户: 该函数首次运行(“ e”进入服务器,我返回返回消息),但是如何使它一遍又一遍地发生(类似于聊天应用程序)?该问题在第一次之后开始。消息不会在第一次之后发送。我究竟做错了什么?我是pyth

  • 问题内容: 我正在建立一个客户-服务器项目。 我需要的是客户端发送一个字符串,例如“ Pendu”,服务器接收该字符串并将一个名为“ Pendu”的对象发送回客户端。 这是我的代码: 该类在包中定义: 我的问题是: 首先,我执行服务器,然后看到控制台中显示的内容。 然后我执行客户端,在控制台中,我收到如下消息: 同时,服务器端未显示任何新内容。 现在,我停止客户端,并显示服务器的所有其他消息: 当

  • 我正在编写一个简单的TCP客户端和服务器Perl脚本。到现在为止,我使用wireshark验证了三路TCP握手,并且建立了连接。但当我尝试发送或恢复数据时,什么也不会发生。 1)客户端和服务器之间的主要区别只是服务器增加了一个LISTEN参数,使它能够侦听传入的连接? 2)在recv和显示数据之间是否缺少任何步骤? 3)当程序第一次执行while循环时,难道不应该至少发送硬编码字符串“$respo

  • 问题内容: 如何创建SSL套接字连接? 我真的需要创建密钥库吗?该密钥库应该与我所有的客户端应用程序共享吗? 我用以下代码创建了一个服务器: 我用以下代码在android上创建了一个客户端: 但是当我尝试连接时,会引发以下错误: 问题答案: 您需要一个证书来建立ssl连接,您可以在密钥库中加载证书,也可以加载证书本身。我将显示一些有关keystore选项的示例。 您的代码需要一些参数才能运行: 您