PHP中Libevent HTTP客户端实现程序
下面来给各位介绍一段用php实现的Libevent HTTP客户端实现程序,有需要了解的朋友可与小编一起来学习一下.
php Libevent HTTP,代码如下:
<?php //请求完成回调 function _request_handler($req, $base) { global $pend_req; //echo __FUNCTION__, PHP_EOL; if (is_null($req)) { //echo "Timed out\n"; } else { $response_code = $req->getResponseCode(); if ($response_code == 0) { //echo "Connection refused\n"; } elseif ($response_code != 200) { //echo "Unexpected response: $response_code\n"; } else { //echo "Success: $response_code\n"; /* $buf = $req->getInputBuffer(); echo "Body:\n"; while ($s = $buf->readLine(EventBuffer::EOL_ANY)) { echo $s, PHP_EOL; } */ } } $pend_req--; //退出循环 if (!$pend_req) { $base = $conn->getBase(); $base->exit(NULL); } //释放内存 unset($req); unset($conn); } //$address = "www.phprm.com"; $pend_req = 0; $port = 80; //初始化event base $base = new EventBase(); echo "Event method used: ", $base->getMethod(), PHP_EOL; //使用异步DNS $dns_base = new EventDnsBase($base, TRUE); $f= fopen("./50000.txt","r"); while (!feof($f)) { $line = fgets($f); //echo $address; $address = trim($line); //新建http连接事件到base $conn = new EventHttpConnection($base, $dns_base, $address, $port); $conn->setTimeout(1); //设置请求回调 $req = new EventHttpRequest("_request_handler", $conn); $req->addHeader("Host", $address, EventHttpRequest::OUTPUT_HEADER); $req->addHeader("Content-Length", "0", EventHttpRequest::OUTPUT_HEADER); $conn->makeRequest($req, EventHttpRequest::CMD_GET, "/"); $pend_req++; } fclose($f); //事件主循环 $base->loop();
c语言版,代码如下:
#include <stdio.h> #include <string.h> #include <ctype.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> #include <evhttp.h> #include <event2/event.h> #include <event2/http.h> #include <event2/bufferevent.h> typedef struct my_struct_s my_struct_t; struct my_struct_s { struct evhttp_connection *conn; struct evhttp_request *req; struct evhttp_uri *uri; struct event *cleanup; }; struct event_base *Base_Primary; char *trimwhitespace(char *str) { char *end; // Trim leading space while(isspace(*str)) str++; if(*str == 0) // All spaces? return str; // Trim trailing space end = str + strlen(str) - 1; while(end > str && isspace(*end)) end--; // Write new null terminator *(end+1) = 0; return str; } void connection_free(int sock, short which, void *arg) { //printf("freeing connection!!! The socket's FD would have been closed when the HTTP request ended and the ->req object would have been free'd\n"); // Get our structure object my_struct_t *myStruct = arg; // Cleanup our properties event_free(myStruct->cleanup); evhttp_connection_free(myStruct->conn); evhttp_request_free(myStruct->req); evhttp_uri_free(myStruct->uri); // Free our custom structure free(myStruct); } void http_request_done(struct evhttp_request *req, void *arg){ // Get our custom struct my_struct_t *myStruct = arg; // Setup our timeout information (we delay 5 seconds) struct timeval Timeout; Timeout.tv_sec = 0; Timeout.tv_usec = 0; // Add this structure to our cleanup base to be cleaned up synchronously // TODO: Probably not the best way to cleanup and event, but it'l work for the purposes of illustration. // This way would ensure no race conditions exist, but it's probably not the most efficient depending on how many requests, etc we're dealing with. myStruct->cleanup = evtimer_new(Base_Primary, connection_free, (void *)myStruct); evtimer_add(myStruct->cleanup, &Timeout); //printf("http_request_done, we put our custom strucutre into a cleanup event to be freed!\n"); } int http_req(char *uri) { // Allocate our custom struture my_struct_t *myStruct = malloc(sizeof(my_struct_t)); // Create our EVHTP connection and request myStruct->uri = evhttp_uri_parse(uri); myStruct->conn = evhttp_connection_base_new(Base_Primary, NULL, uri, 80); myStruct->req = evhttp_request_new(http_request_done, myStruct); evhttp_add_header(evhttp_request_get_output_headers(myStruct->req), "Host", "localhost"); evhttp_add_header(evhttp_request_get_output_headers(myStruct->req), "Connection", "close"); evhttp_make_request(myStruct->conn, myStruct->req, EVHTTP_REQ_GET, uri); evhttp_connection_set_timeout(myStruct->req->evcon, 2); return 1; } // Define our primary function int main(int argc, char *argv[]) { // Initialize our bases Base_Primary = event_base_new(); char filename[] = "/tmp/50000.txt"; //文件名 FILE *fp; char StrLine[1024]; //每行最大读取的字符数 char *host; if((fp = fopen(filename,"r")) == NULL) //判断文件是否存在及可读 { printf("error!"); return -1; } while (!feof(fp)) { fgets(StrLine,1024,fp); //读取一行 host = StrLine; host = trimwhitespace(host); //printf("%s", host); //输出 http_req(host); } fclose(fp); // //event_base_loop(Base_Primary); event_base_dispatch(Base_Primary); // Free our primary base event_base_free(Base_Primary); return 1; }
文章地址:
转载随意^^请带上本文地址!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Rangka kerja Amphp ialah rangka kerja pengaturcaraan tak segerak PHP yang cekap yang menyokong pelbagai protokol dan komponen, yang mana klien HTTP adalah salah satu komponen terasnya. Menggunakan klien HTTP dalam rangka kerja Amphp, kami boleh menghantar permintaan HTTP tak segerak dan respons proses dengan mudah, dengan itu meningkatkan prestasi dan kebolehskalaan aplikasi web yang kami bina. Artikel ini akan memperkenalkan cara menggunakan klien HTTP dalam rangka kerja Amphp. 1. Pasang rangka kerja Amphp sebelum mula menggunakan klien HTTP rangka kerja Amphp.

Pelanggan HTTP tak segerak baharu dalam PHP8.1 Dengan perkembangan pesat Internet, prestasi pelbagai aplikasi web menjadi semakin penting. Untuk memberikan pengalaman pengguna yang lebih baik, pembangun perlu menggunakan alat dan teknik yang cekap untuk mengendalikan pelbagai permintaan rangkaian. Nasib baik, PHP8.1 memperkenalkan ciri baharu, klien HTTP tak segerak, yang membolehkan kami melaksanakan permintaan HTTP tanpa menyekat, sekali gus meningkatkan prestasi aplikasi. Dengan klien HTTP tak segerak kami boleh meneruskan pelaksanaan selepas menghantar permintaan

Dalam aplikasi web moden, klien HTTP adalah komponen penting. Ia boleh digunakan untuk mengakses API REST, bertukar data dan melakukan panggilan prosedur jauh. Walau bagaimanapun, sesetengah pelaksanaan klien HTTP konvensional mungkin menghadapi masalah prestasi seperti kependaman rangkaian, mengendalikan sejumlah besar permintaan, dsb. Swoole, pustaka rangkaian berprestasi tinggi berdasarkan PHP, boleh menyelesaikan masalah ini dengan berkesan. Dalam artikel ini, kami akan meneroka cara menggunakan Swoole untuk melaksanakan klien HTTP berprestasi tinggi. 1. Pengetahuan asas mendalam dalam diri kita

Rangka kerja Gin ialah rangka kerja web ringan yang direka bentuk untuk menyediakan model pemprosesan web berprestasi tinggi dan ketersediaan tinggi. Dalam rangka kerja Gin, klien HTTP dan kumpulan sambungan adalah komponen yang sangat penting. Artikel ini akan menyelidiki butiran pelaksanaan asas klien HTTP dan kumpulan sambungan dalam rangka kerja Gin. 1. Pelanggan HTTP Pelanggan HTTP ialah komponen teras dalam rangka kerja Gin untuk menghantar permintaan HTTP. Dalam rangka kerja Gin, terdapat banyak cara yang berbeza untuk melaksanakan klien HTTP, tetapi dua cara yang paling biasa digunakan ialah

Bahasa Go ialah bahasa pengaturcaraan yang sangat popular dalam beberapa tahun kebelakangan ini Ia digunakan secara meluas dalam pembangunan web, pengaturcaraan sistem, pengkomputeran awan dan bidang lain. Ini adalah senario yang sangat biasa untuk menggunakan protokol HTTP untuk komunikasi rangkaian dalam bahasa Go Untuk menulis program klien HTTP dengan mudah, bahasa Go menyediakan pakej net/http dan sub-pakej berkaitannya yang disertakan dengan perpustakaan standard. Walau bagaimanapun, kadangkala kami menghadapi beberapa masalah apabila menggunakan perpustakaan klien HTTP Contohnya, program tidak boleh mendapatkan data yang dikembalikan oleh pelayan rangkaian atau program klien dengan betul

Bagaimana untuk menghantar permintaan GET dan menghuraikan respons menggunakan fungsi klien HTTP dalam bahasa Go? 1. Pengenalan kepada fungsi klien HTTP Dalam bahasa Go, perpustakaan standard menyediakan fungsi untuk melaksanakan klien HTTP. Fungsi ini boleh digunakan untuk menghantar pelbagai jenis permintaan HTTP dan menghuraikan respons. Dalam artikel ini, kami akan menumpukan pada cara menggunakan fungsi klien HTTP untuk menghantar permintaan GET dan menghuraikan respons. 2. Menghantar permintaan GET Dalam bahasa Go, menghantar permintaan GET boleh dilaksanakan melalui fungsi http.Get().

Apabila aplikasi web terus berkembang, keperluan untuk klien HTTP menjadi semakin penting, terutamanya apabila data diminta merentas rangkaian. Dalam pelaksanaan PHP tradisional, ia adalah cara biasa untuk menggunakan perpustakaan seperti cURL untuk membuat permintaan rangkaian, tetapi ia tidak menyokong permintaan tak segerak, mengakibatkan pengehadan prestasi apabila sejumlah besar permintaan serentak berlaku. Swoole ialah enjin komunikasi rangkaian coroutine berdasarkan PHP Ia menyediakan kaedah permintaan tak segerak yang boleh meningkatkan prestasi aplikasi. Artikel ini akan memperkenalkan cara menggunakan Swoole untuk membungkus a

Java telah menjadi salah satu bahasa pengaturcaraan yang paling popular hari ini. Walau bagaimanapun, walaupun bahasa pengaturcaraan terbaik boleh membuat kesilapan. Salah satu isu biasa ialah ralat klien HTTP standard Java11. Dalam artikel ini, kami akan mendalami punca ralat klien HTTP standard Java 11, cara untuk mengendalikan dan mengelakkannya. Apakah ralat pelanggan HTTP standard Java11? Ralat klien HTTP standard Java11 merujuk kepada kemungkinan yang mungkin anda hadapi apabila menggunakan pelaksanaan klien HTTP standard Java11.
