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);这个可以得到返回值的哦!!已经有不止一个人问过我咋接受返回了!!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 기능 소개 - get_headers(): URL의 응답 헤더 정보 얻기 개요: PHP 개발에서는 웹 페이지나 원격 리소스의 응답 헤더 정보를 얻어야 하는 경우가 많습니다. PHP 함수 get_headers()를 사용하면 대상 URL의 응답 헤더 정보를 쉽게 얻고 이를 배열 형식으로 반환할 수 있습니다. 이 기사에서는 get_headers() 함수의 사용법을 소개하고 관련 코드 예제를 제공합니다. get_headers() 함수 사용법: get_header

오류의 원인은 urllib3 라이브러리의 예외 유형인 NameResolutionError(self.host,self,e)frome입니다. 이 오류의 원인은 DNS 확인에 실패했기 때문입니다. 해결을 찾을 수 없습니다. 이는 입력한 URL 주소가 정확하지 않거나 DNS 서버를 일시적으로 사용할 수 없기 때문에 발생할 수 있습니다. 이 오류를 해결하는 방법 이 오류를 해결하는 방법은 여러 가지가 있습니다. 입력한 URL 주소가 올바른지 확인하고 액세스할 수 있는지 확인하십시오. DNS 서버를 사용할 수 있는지 확인하십시오. 명령줄에서 "ping" 명령을 사용해 볼 수 있습니다. DNS 서버를 사용할 수 있는지 테스트하려면 프록시 뒤에 있는 경우 호스트 이름 대신 IP 주소를 사용하여 웹사이트에 액세스해 보세요.

차이점: 1. 정의가 다릅니다. url은 균일한 리소스 위치 지정자이고 html은 하이퍼텍스트 마크업 언어입니다. 2. html에는 여러 개의 URL이 있을 수 있지만 하나의 url에는 단 하나의 html 페이지만 존재할 수 있습니다. 웹 페이지이고 url은 웹 사이트 주소를 나타냅니다.

1. TCP 프로토콜 기반 소켓 프로그래밍 1. 소켓 워크플로는 서버 측에서 시작됩니다. 서버는 먼저 소켓을 초기화한 다음 포트에 바인드하고 포트를 수신하며 차단을 위해 승인을 호출하고 클라이언트가 연결될 때까지 기다립니다. 이때 클라이언트가 Socket을 초기화한 후 서버에 연결(connect)하면, 연결에 성공하면 클라이언트와 서버 간의 연결이 성립된다. 클라이언트는 데이터 요청을 보내고, 서버는 요청을 받아 요청을 처리한 후 클라이언트에 응답 데이터를 보내고, 클라이언트는 데이터를 읽고 마지막으로 연결을 종료합니다. 이를 구현하려면 다음 Python 코드를 사용하세요. : importso

SpringBoot 측의 첫 번째 단계는 종속성을 도입하는 것입니다. 먼저 WebSocket에 필요한 종속성과 com.alibabafastjson1.2.73org.springframework.bootspring-boot-starter-websocket 출력 형식을 처리하기 위한 종속성을 도입해야 합니다. 두 번째 단계는 WebSocket 구성 클래스 importorg를 생성하는 것입니다. springframework.context.annotation.Bean;importorg.springframework.context.annotation.Config

Scrapy는 인터넷에서 대량의 데이터를 얻는 데 사용할 수 있는 강력한 Python 크롤러 프레임워크입니다. 그러나 Scrapy를 개발할 때 중복된 URL을 크롤링하는 문제에 자주 직면하게 되는데, 이는 많은 시간과 자원을 낭비하고 효율성에 영향을 미칩니다. 이 기사에서는 중복 URL의 크롤링을 줄이고 Scrapy 크롤러의 효율성을 향상시키는 몇 가지 Scrapy 최적화 기술을 소개합니다. 1. Scrapy 크롤러의 start_urls 및 allowed_domains 속성을 사용하여

C#의 일반적인 네트워크 통신 및 보안 문제와 해결 방법 오늘날 인터넷 시대에 네트워크 통신은 소프트웨어 개발에 없어서는 안 될 부분이 되었습니다. C#에서는 일반적으로 데이터 전송 보안, 네트워크 연결 안정성 등과 같은 일부 네트워크 통신 문제가 발생합니다. 이 문서에서는 C#의 일반적인 네트워크 통신 및 보안 문제에 대해 자세히 설명하고 해당 솔루션과 코드 예제를 제공합니다. 1. 네트워크 통신 문제 네트워크 연결 중단: 네트워크 통신 과정에서 네트워크 연결이 중단될 수 있으며, 이로 인해

서문 어떤 경우에는 서비스 컨트롤러의 접두사가 일관됩니다. 예를 들어 모든 URL의 접두사는 /context-path/api/v1이고 일부 URL에는 통합 접두사를 추가해야 합니다. 가능한 해결책은 서비스의 context-path를 수정하고 api/v1을 context-path에 추가하는 것입니다. 전역 접두사를 수정하면 위의 문제를 해결할 수 있지만 URL에 여러 접두사가 있는 경우 단점이 있습니다. URL에는 접두사가 필요합니다. api/v2인 경우 서비스의 일부 정적 리소스에 api/v1을 추가하지 않으려면 구별할 수 없습니다. 다음은 사용자 정의 주석을 사용하여 특정 URL 접두어를 균일하게 추가합니다. 하나,
