PHP用socket模拟post之fsocketopen
PHP用socket模拟post之fsocketopen
地听说这个功能需求的时候,立即就蒙了,不骗大家!首先PHP的socket几乎都没使用过,其次没有听说过post还能用PHP的socket来模拟的呢!后来找了个案例看了看,才明白其实没有那么高深,只不过战地还不清楚post的原理和本质而已,其实本质就是发送给目的程序一个标志为post的协议串如下:
POST /目的程序 HTTP/1.1
Accept: */*
Accept-Language: zh-cn,en-us;q=0.5
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; .NET CLR 1.0.3705; .NET CLR 1.1.4322)
Host: 要发送到的主机地址
Content-Length: 发送数据的长度
Pragma: no-cache
Cache-Control: no-cache
username=php&password=iask //post发送的数据
我想大家对form的post方法应该是最熟悉不过了,例如我们想吧用户名和密码发送给某个页面的时候,点击有两个文本域的表单的提交按钮,这个表单发送到action程序的就是以上数据。知道了这一点我想就不难了。
这时候我们只需要用php的socket打开一个端口,例如80端口,把以上信息利用这个端口发送给目的程序就行了。
我们如何在一个端口上建立一个socket信道呢?
在PHP中是如此简单呢!
fsocketopen(主机名称,端口号码,错误号的接受变量,错误提示的接受变量,超时时间)
主机名称就是你需要发送数据的目的地;
端口号就是这个目的程序会在哪个端口等着你的数据;
错误号的接受变量,这个是如果建立socket不成功的时候返回的错误编号;
错误提示的变量,是错误的时候返回的错误提示信息;
超时时间,就是post数据之后如果对方没有回应信息,等待的最长时间。
如果不出意外(你正确的设置fsocketopen()函数的参数)的话,一个socket信道现在已经打开了,我们下一步需要做的就是,通过这个打开的信道把post请求协议发给目的程序,这时候可以使用fwrite或者fputs函数中的任意一个,把post的请求格式发给fsocketopen()打开的句柄,这时候一个伟大的socket模拟的post请求就诞生了。顺便说一下啊:
你发送的时候可不能把我的post请求格式直接ctrl + V过去,你没看见里面的汉字等你自己去填写的吗?
以上是文字的描述,如果大家觉得说的非常垃圾,非常没有说服力的话,下边有一个现成的程序片段,大家可以看看。
$port = $url['port'] ? $url['port'] : 80;
$fp = fsockopen($url['host'], $port, $errno, $errstr,10);
if (!$fp) return "在主机: $url[host] $port 打开socket失败,失败原因是: $errno - $errstr";
fputs($fp, sprintf("POST %s%s%s HTTP/1.0rn", $url['path'], $url['query'] ? "?" : "", $url['query']));
fputs($fp, "Host:".$url['host']."rn");
fputs($fp, "Content-type: application/x-www-form-urlencodedrn");
fputs($fp, "Content-length: " . strlen($encoded) . "rn");
fputs($fp, "Connection: closernrn");
fputs($fp, "$encoded ");
对了还是顺便说一下吧,fgets($fp,1024);这个可以得到返回值的哦!!已经有不止一个人问过我咋接受返回了!!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Einführung in die PHP-Funktion – get_headers(): Überblick über das Abrufen der Antwort-Header-Informationen der URL: In der PHP-Entwicklung müssen wir häufig die Antwort-Header-Informationen einer Webseite oder einer Remote-Ressource abrufen. Die PHP-Funktion get_headers() kann problemlos die Antwortheaderinformationen der Ziel-URL abrufen und in Form eines Arrays zurückgeben. In diesem Artikel wird die Verwendung der Funktion get_headers() vorgestellt und einige zugehörige Codebeispiele bereitgestellt. Verwendung der Funktion get_headers(): get_header

Der Grund für den Fehler ist NameResolutionError(self.host,self,e)frome, ein Ausnahmetyp in der urllib3-Bibliothek. Der Grund für diesen Fehler ist, dass die DNS-Auflösung fehlgeschlagen ist, d. h. der Hostname oder die IP-Adresse Der Lösungsversuch konnte nicht gefunden werden. Dies kann daran liegen, dass die eingegebene URL-Adresse falsch ist oder der DNS-Server vorübergehend nicht verfügbar ist. So beheben Sie diesen Fehler Es gibt möglicherweise mehrere Möglichkeiten, diesen Fehler zu beheben: Überprüfen Sie, ob die eingegebene URL-Adresse korrekt ist und stellen Sie sicher, dass sie zugänglich ist. Stellen Sie sicher, dass der DNS-Server verfügbar ist. Sie können es mit dem Befehl „ping“ in der Befehlszeile versuchen Um zu testen, ob der DNS-Server verfügbar ist, versuchen Sie, über die IP-Adresse statt über den Hostnamen auf die Website zuzugreifen, wenn Sie sich hinter einem Proxy befinden

1. Socket-Programmierung basierend auf dem TCP-Protokoll 1. Der Socket-Workflow beginnt auf der Serverseite. Der Server initialisiert zuerst den Socket, bindet dann an den Port, lauscht auf den Port, ruft „Accept“ zum „Blockieren“ auf und wartet darauf, dass der Client eine Verbindung herstellt. Wenn zu diesem Zeitpunkt ein Client einen Socket initialisiert und dann eine Verbindung zum Server herstellt (verbinden), wird bei erfolgreicher Verbindung die Verbindung zwischen dem Client und dem Server hergestellt. Der Client sendet eine Datenanforderung, der Server empfängt die Anforderung und verarbeitet sie, sendet dann die Antwortdaten an den Client, der Client liest die Daten und schließt schließlich die Verbindung. Verwenden Sie den folgenden Python-Code, um sie zu implementieren : importso

Unterschiede: 1. Unterschiedliche Definitionen, URL ist ein einheitlicher Ressourcen-Locator und HTML ist eine Hypertext-Markup-Sprache. 2. Es kann viele URLs in einer HTML-Seite geben, aber nur eine HTML-Seite kann in einer URL vorhanden sein eine Webseite, und URL bezieht sich auf die Website-Adresse.

Der erste Schritt auf der SpringBoot-Seite besteht darin, Abhängigkeiten einzuführen. Zuerst müssen wir die für WebSocket erforderlichen Abhängigkeiten sowie die Abhängigkeiten für die Verarbeitung des Ausgabeformats com.alibabafastjson1.2.73org.springframework.bootspring-boot-starter-websocket einführen. Der zweite Schritt besteht darin, die WebSocket-Konfigurationsklasse importorg springframework.context.annotation.Bean;importorg.springframework.context.annotation.Config zu erstellen

Vorwort In einigen Fällen sind die Präfixe im Service-Controller konsistent. Beispielsweise lautet das Präfix aller URLs /context-path/api/v1, und einigen URLs muss ein einheitliches Präfix hinzugefügt werden. Die denkbare Lösung besteht darin, den Kontextpfad des Dienstes zu ändern und api/v1 zum Kontextpfad hinzuzufügen. Durch Ändern des globalen Präfixes kann das oben genannte Problem gelöst werden, es gibt jedoch einige Nachteile URLs erfordern Präfixe. Wenn es sich um api/v2 handelt, kann es nicht unterschieden werden. Wenn Sie api/v1 nicht zu einigen statischen Ressourcen im Dienst hinzufügen möchten, kann es nicht unterschieden werden. Im Folgenden werden benutzerdefinierte Anmerkungen verwendet, um bestimmte URL-Präfixe einheitlich hinzuzufügen. eins,

Scrapy ist ein leistungsstarkes Python-Crawler-Framework, mit dem große Datenmengen aus dem Internet abgerufen werden können. Bei der Entwicklung von Scrapy stoßen wir jedoch häufig auf das Problem, doppelte URLs zu crawlen, was viel Zeit und Ressourcen verschwendet und die Effizienz beeinträchtigt. In diesem Artikel werden einige Scrapy-Optimierungstechniken vorgestellt, um das Crawlen doppelter URLs zu reduzieren und die Effizienz von Scrapy-Crawlern zu verbessern. 1. Verwenden Sie die Attribute „start_urls“ und „allowed_domains“ im Scrapy-Crawler

Häufige Netzwerkkommunikations- und Sicherheitsprobleme und Lösungen in C# Im heutigen Internetzeitalter ist Netzwerkkommunikation zu einem unverzichtbaren Bestandteil der Softwareentwicklung geworden. In C# treten normalerweise einige Netzwerkkommunikationsprobleme auf, z. B. die Sicherheit der Datenübertragung, die Stabilität der Netzwerkverbindung usw. In diesem Artikel werden häufig auftretende Netzwerkkommunikations- und Sicherheitsprobleme in C# ausführlich erläutert und entsprechende Lösungen und Codebeispiele bereitgestellt. 1. Netzwerkkommunikationsprobleme Unterbrechung der Netzwerkverbindung: Während des Netzwerkkommunikationsprozesses kann die Netzwerkverbindung unterbrochen werden, was zu Problemen führen kann
