`
lzqustc
  • 浏览: 210424 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Perl之HTTP::Request

    博客分类:
  • Perl
阅读更多

use URI::Escape;#URL编码

use JSON;

 

#发送GET请求

use LWP::Simple;

 

my $tmp = "您本次操作的验证码为:$code";

my $smsmsg = uri_escape_utf8($tmp); #URL编码

my $args="http://xxx?p=".$phone."&c=$smsmsg";

my $response = get($args);

 

或者:

use HTTP::Request;

use HTTP::Headers;

use LWP::UserAgent;

my $ua = LWP::UserAgent->new;

$ua->timeout(10); #设置超时时间10s, 默认是180s

my $header = HTTP::Headers->new( Content_Type => 'text/html; charset=utf8', ); #设置head

$request = HTTP::Request->new('GET', $url, $header);

my $response = $ua->request($request);

my $res = "";

if ($response->message ne "OK" && $response->is_success ne "1") { #出错,或者timeout了

    $res = "error or timeout";

} else {

    $res = decode("utf-8",$response->content);

}

 

 

#发送POST请求

use HTTP::Request;

use HTTP::Headers;

use LWP::UserAgent;

use JSON;

 

my $url="http://xxx?p=".$phone."&c=$smsmsg";

my $json = JSON->new();

my $ua = LWP::UserAgent->new(); 

my $req = HTTP::Request->new('POST', $url); 

my $response = $ua->request($req);

my $ret = $json->decode($response->decoded_content());

 

#复杂点的,PSOT内容为xml格式,请求为https

my $request_xml = create_xml_data($tmp); #构造 xml格式的字符串

my $header = HTTP::Headers->new( Content_Type => 'text/xml; charset=utf8', );

my $http_request = HTTP::Request->new( POST => "https://xxx", $header, $request_xml);

my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0, SSL_verify_mode => 0x00 });

my $response = $ua->request($http_request);

 

# PSOT内容为JSON格式

my $header = HTTP::Headers->new( Content_Type => 'application/json; charset=utf8', );

my $param_json_str =$json->encode($post_data); #构造JSON格式的字符串

my $http_request = HTTP::Request->new( POST => "https://xxxxx", $header, $param_json_str );

 

#特殊POST, https服务器需要客户端上传证书

#以微信现金红包发放API为例,https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3

#证书说明:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=4_3

#

my $header = HTTP::Headers->new( Content_Type => 'text/xml; charset=utf8', );

my $http_request = HTTP::Request->new( POST => "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack", $header, $request_xml);

my $ua = LWP::UserAgent->new(

  ssl_opts => { 

    verify_hostname => 0, 

    #SSL_verify_mode => 0x00, 

    #SSL_ca_file => '/var/wechat/rootca.pem' # 如果客户端也要去验证微信服务器,则需要导入CA证书

    SSL_use_cert => 1,

    SSL_cert_file => '/var/wechat/apiclient_cert.pem', # 证书文件pem格式

    SSL_key_file => '/var/wechat/apiclient_key.pem', # 证书密钥pem格式

    SSL_passwd_cb => sub { $config->{mch_id} },# 证书密码

  },

);

my $response = $ua->request($http_request);

 

 

#特殊POST,服务器要求Content-Type: application/x-www-form-urlencoded格式post

#必须采用下列方式,因为接口要求Content-Type: application/x-www-form-urlencoded

#参考perl网站:https://metacpan.org/pod/HTTP::Request::Common

 

use HTTP::Request::Common

use LWP::UserAgent;

use JSON;

 

方式一:

my $response = $ua->request(POST 'https://xxxxx', 

    [

        distributionid => $ID,

        distributionkey => $KEY,

        request_type => 1,

        send_type => 1,

        industry => "互联网/电子商务",

        sent_way => 3,

        merchants => "xxxx",

        device_id => "9823413111"

      ]

);

 

方式二:

my $params = {

        distributionid => $ID,

        distributionkey => $KEY,

        request_type => 1,

        send_type => 1,

        industry => "互联网/电子商务",

        sent_way => 3,

        merchants => "xxxx",

        device_id => "9823413111"

};

 

my $tmp = join( '&',

map { sprintf( '%s=%s', $_, $params->{$_} ) } 

sort { $a cmp $b } keys %$params );

my $content = uri_escape_utf8($tmp); # 区别于方式一,这里需要自行做urlencode

my $header = HTTP::Headers->new( Content_Type => 'application/x-www-form-urlencoded; charset=utf8', );

my $http_request = HTTP::Request->new( POST => 'https://xxxxx', $header, $content );

 

my $ret;

if ($response->message ne "OK" && $response->is_success ne "1") {

        $ret->{msg} = "error";

} else { 

        my $json = JSON->new();

        $ret = $json->decode($response->decoded_content());

}

 

 

# 使用代理方式发送请求

$ua->timeout(2);

$ua->proxy(['http'], "http://$proxyAddr");  # $proxyAddr 可以是ip加端口例如 "172.1.1.1:128", 相应的也可以用https代理

 

# 添加http协议头

my @header = ( "Accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",

        "Accept-Charset" => "utf-8, iso-8859-1, utf-16, *;q=0.7",

        "User_Agent" => "Mozilla/5.0 (Linux; U; Android 6.0.1; zh-cn; MI 3W Build/MMB29M)",

        "X-Requested-With" => "com.android.browser",

        #"X-Forward-For" => $ip

);

my $req = HTTP::Request->new( GET => $url);

$req->header(@header);

my $response = $ua->request($req);

 

 

 

分享到:
评论

相关推荐

    perl-HTTP-Server-Simple

    该扩展包还支持其他类型的服务器,比如基于Socket的服务器(`HTTP::Server::Simple::Socket`)和基于HTTP/2的服务器(`HTTP::Server::Simple::HTTP2`)。这些不同的子类提供了不同的功能,以适应不同的应用场景。 ...

    libhttp-cookies-perl_6.00.orig.tar_libhttp_

    读取Cookie时,可以调用`cookie_for_request`方法,它会返回适用于特定HTTP请求的Cookie。 4. **处理HTTP请求和响应** 在发送HTTP请求时,使用`as_string`方法将Cookie Jar中的Cookie转换为HTTP请求头的格式,然后...

    perl统计网络流量的代码

    Perl是一种强大的脚本编程语言,尤其适用于文本处理和系统管理任务。在本场景中,我们关注的是使用Perl来统计网络流量。这个特定的Perl代码旨在从TPLINK路由器中获取流量数据,进而分析局域网中各电脑的互联网访问...

    mod-perl developers cookbook

    - **章节概述**:本章深入讲解了mod_perl提供的Apache请求对象(Request),这是处理HTTP请求的基础。 - **核心知识点**: - Request对象的方法和属性详解。 - 如何使用Request对象解析用户请求、获取请求参数等...

    perl_scripts:一些有用的sed脚本在您的工作中

    `Net::Socket`、`HTTP::Request` 和 `LWP` 等模块提供了网络通信的功能。 “perl_scripts-master”这个文件名可能表明这是一个Git仓库的主分支,里面可能包含了多个子目录和脚本文件,每个都有特定的功能。通过学习...

    perl http服务器

    HTTP服务器是互联网上应用最广泛的服务器类型之一,它负责接收客户端(如浏览器)的HTTP请求,并返回相应的HTTP响应,如HTML文档、图片或其他资源。 首先,让我们理解Perl HTTP服务器的基本工作原理。HTTP服务器的...

    perl CGI编程基础

    - HTTP请求相关的环境变量:如REQUEST_METHOD(GET或POST)、QUERY_STRING(URL参数)和CONTENT_TYPE(请求数据的类型)。 - 客户端信息:REMOTE_ADDR(客户端IP地址)、HTTP_USER_AGENT(浏览器信息)等。 3. **...

    CGI-Perl实例起步

    总结,CGI-Perl实例起步是一个逐步学习和实践CGI编程的过程,通过分析和执行给出的Perl脚本,我们可以了解CGI程序的工作原理,掌握如何利用Perl处理HTTP请求,生成动态网页,并最终提升Web开发能力。在这个过程中,...

    mod_perl docs

    2. **PerlApache Object Request Broker (PLORB) 和 Apache::Registry**: 这些组件允许用户将Perl脚本作为CGI脚本处理,或以更高效的方式作为Apache模块运行。 3. **PerlApache2::Request**: 提供了一个接口,用于...

    PERL Win32 Quick Reference

    - `($statuscode, $headers, $file) = $HTTP->Request("/");`:发送HTTP请求,返回状态码、头部信息和内容。 - `binmode STDOUT; print $file;`:输出获取到的内容。 - **注意事项**: - 邮箱地址需要转义(如`...

    用PERL LWP模块实现的一个在线字典脚本

    1. Perl的LWP模块及其主要组件,如LWP::UserAgent、HTTP::Request和HTTP::Response。 2. 如何在Perl中发起HTTP请求,包括GET和POST方法。 3. HTML解析的基本概念,以及如何结合HTML解析模块从网页中提取数据。 4. ...

    PureProxy:纯Perl HTTP代理服务器

    名称 pureproxy-Pure Perl HTTP代理服务器 ...http_proxy=http://localhost:5000/ lwp-request http://www.perl.org/ https_proxy=http://localhost:5000/ lwp-request https://metacpan.org/ 描述 这是纯Perl HTTP

    CGI Programming with Perl

    2. **环境变量**:CGI程序通过读取Web服务器传递的环境变量来获取请求信息,如`REQUEST_METHOD`(GET或POST)、`QUERY_STRING`(GET请求的参数)和`CONTENT_TYPE`(POST请求的数据类型)。 3. **输入和输出**:CGI...

    PERL Quick Reference Card

    ### PERL快速参考卡:modperl模块概览与核心功能详解 #### 标题与描述解析 标题“PERL Quick Reference Card”明确指出这是一份关于PERL编程语言的快速参考指南,旨在为用户提供关键概念、函数和用法的速查表。而...

    Practical Mod Perl

    Apache::args Versus Apache::Request::param Versus CGI::param Section 13.3. Buffered Printing and Better print( ) Techniques Section 13.4. Interpolation, Concatenation, or List Section ...

    perl完美教程网站克隆版

    学习相关的网络库,如LWP和HTTP::Request,能够让你利用Perl进行网络通信。 9. **数据库接口**:Perl的DBI模块提供了统一的数据库接口,可以轻松连接和操作各种类型的数据库,如MySQL、PostgreSQL等。 10. **脚本...

    Google-Calendar-Perl-access:用于Google Calendar v3 API访问的Perl库

    Google Calendar Perl访问 它包含一个库( calendar_functions.pl ),该库可... get_request() access_token() is_booked() get_bookings() get_calendar_list_data() get_calendar_id() 有一个Bour

    最近看了关于perl catalyst的不错翻译,上传上来大家一起学学

    - **Request对象**:封装了HTTP请求的信息,如方法、URL、参数等。 - **Response对象**:包含了HTTP响应的信息,如状态码、头信息、内容等。 - **Action**:Controller中的方法,处理具体的业务逻辑。 4. **配置...

    grpc-perl:使用官方gRPC共享库的gRPC的Perl 5实现

    **gRPC for Perl 5: An In-depth Look into grpc-perl** gRPC 是一个高性能、开源的 RPC(远程过程调用)框架,它基于 Google 的 Protocol Buffers(protobuf)进行序列化和接口定义。gRPC 支持多种编程语言,包括 ...

    perl-Net-SAML2-master.zip-Net::SAML2 - SAML bindings and proto

    - **SAML请求(Request)**:SP向IdP发送的,请求验证主体的XML文档。 2. **SAML绑定(Bindings)**: - HTTP Redirect:通过HTTP重定向传递SAML消息。 - HTTP POST:将SAML消息作为HTTP请求的一部分POST到目标...

Global site tag (gtag.js) - Google Analytics