Как я могу отправить некоторый udp через python в веб-домен?

#python #http #udp

#python #http #udp

Вопрос:

Итак, в настоящее время я пытаюсь отправить udp на сервер с веб-доменом, подобным этому www.example.com/path?stuff=exist В настоящее время я пытаюсь использовать сокет, и это пример моего кода

 import socket

IPADDR = '64.233.177.139'

that is the ip of google, and not the ip I am currently trying to send to

PORTNUM = 9001

PACKETDATA = '42["message","test"]'

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
s.connect((IPADDR, PORTNUM, '/path?stuff=exist'))
s.send(PACKETDATA)`
  

И в настоящее время я получаю эту ошибку
TypeError: getsockaddrarg() takes exactly 2 arguments (3 given)

Я новичок в использовании библиотеки сокетов и немного покопался, но безрезультатно.

Для получения некоторого дополнительного контекста я просто хочу отправить данные PACKETDATA на сервер google.com/path?stuff=exist (на самом деле это не тот URL, просто пример) Что-нибудь помогает, заранее спасибо.

Ответ №1:

Ваша непосредственная проблема программирования заключается в том, что socket.connect ожидается вызов с аргументом, который представляет собой кортеж, содержащий ровно два элемента — строку имени хоста (или IP-адреса) и номер порта. Но эта программа передает кортеж аргументов, который содержит 3 элемента — адрес хоста, номер порта и строку '/path?stuff=exist' . Вот почему сообщение об ошибке жалуется на нахождение 3 вещей, где ожидалось только 2.

Если вы хотите отправить '/path?stuff=exist' через UDP, вам придется включить его в часть данных дейтаграммы. Вам также придется придумать какой-то способ отличить его от PACKETDATA , который вы уже вводите в тело дейтаграммы. (Это не обязательно должно быть необычным. Вы могли бы просто вставить пробел между строкой path и PACKETDATA .)

Здесь также может быть концептуальная проблема. Веб-сервер прослушивает только трафик TCP. Он не прослушивает UDP-трафик. Итак, если вы не предусмотрели, чтобы на вашем конкретном сервере был какой-то прослушиватель, принимающий дейтаграммы на целевом UDP-порту, ничто на стороне сервера не будет собирать этот трафик даже после того, как вы выяснили, как заставить Python отправлять его.