日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

perl6 HTTP::UserAgent (2)

發(fā)布時(shí)間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 perl6 HTTP::UserAgent (2) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://www.cnblogs.com/perl6/p/6911166.html

之前這里有個(gè)小小例子, 這里只要是總結(jié)一下。

?

HTTP::UserAgent包含了以下模塊:

---------------------------------------------------------------------------------------------- Module |Path-Name |File-ID ---------------------------------------------------------------------------------------------- HTTP::Header |lib/HTTP/Header.pm6 |A2B86332480F329B842FC2F3922B81A1F7B1D4E9 HTTP::Cookie |lib/HTTP/Cookie.pm6 |8BBC36DD2291BA0AA0055B55B7DE6FD9688D6C53 HTTP::Message |lib/HTTP/Message.pm6 |36AD1387CCFFA8C668215E08B003366DCB85A964 HTTP::Cookies |lib/HTTP/Cookies.pm6 |438D31E029F25512CB05696C78EE4AF41B40527A HTTP::Request |lib/HTTP/Request.pm6 |458DA83ACB4B7B3BA98573502EB4879AC1D92194 HTTP::Response |lib/HTTP/Response.pm6 |992068840F9CBA1830BB4A29F4338946BABA70B5 HTTP::MediaType |lib/HTTP/MediaType.pm6 |6970F2A79AC4473EED61B71050458E5BFC9702F2 HTTP::UserAgent |lib/HTTP/UserAgent.pm6 |7789AD4CBAC37F02FE832B1C68B30593E2217384 HTTP::Header::Field |lib/HTTP/Header/Field.pm6 |FDBA1F1A4186FD9C0D675459CB6D40479BA7ADE5 HTTP::Request::Common |lib/HTTP/Request/Common.pm6 |9ED2E957313B252F4FFBF086D39C8918F6C7C4F0 HTTP::UserAgent::Common|lib/HTTP/UserAgent/Common.pm6|ECD443F272FDD584E9EBA9449AA32E9C84C87F26 ----------------------------------------------------------------------------------------------

?

HTTP::UserAgent -> 創(chuàng)建一個(gè)瀏覽器($ua)

HTTP::Cookies -> 設(shè)置COOKIE

HTTP::Header -> 設(shè)置頭部信息, 如User-Agent, Content-Type等

HTTP::Request -> 設(shè)置一個(gè)請(qǐng)求, 比如POST/GET等

?

我們先看一下數(shù)據(jù)包結(jié)構(gòu):

?

上面一部分中的User-Agent/Accept等頭部修息, 可以用 HTTP::Header 設(shè)置。

Cookie 位置可以用 HTTP::Cookies 設(shè)置

下面的POST發(fā)送過去的數(shù)據(jù), 我們可以用 HTTP::UserAgent 發(fā)送或用HTTP::Request設(shè)置后再發(fā)送。

?

我們先看一下HTTP::Cookies

> my $c = HTTP::Cookies.new HTTP::Cookies.new(cookies => [], file => Any, autosave => 0) > $c HTTP::Cookies.new(cookies => [], file => Any, autosave => 0) >

?

方法有如下幾個(gè):

> $c.^methods (extract-cookies add-cookie-header save load clear-expired clear set-cookie push-cookie Str cookies file autosave)

手動(dòng)設(shè)置Cookie可以用 set-cookie 方法:

$c.set-cookie('Set-Cookie:a=b');

注意里面的 Set-Cookie字符串一定要有。

my $cookies = HTTP::Cookies.new;$cookies.set-cookie('Set-Cookie: name1=value1; Secure');$cookies.set-cookie('Set-Cookie: name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT');$cookies.clear; # 清除cookie

?

?

這就是 cookie 的設(shè)置。當(dāng)然還有其他方法, 但個(gè)人覺得這個(gè)已經(jīng)夠用了。

?

我們來看 HTTP::Request:

> my $r = HTTP::Request.new; HTTP::Request.new(method => HTTP::Request::RequestMethod, url => Any, file => Any, uri => Any, host => Str, port => Int, scheme => Str, header => HTTP::Header.new(fields => []), content => Any, protoc ol => "HTTP/1.1", binary => Bool::False, text-types => Array[Str].new()) >

注意上面的 $r 對(duì)象, 它參數(shù)中包含有一個(gè) header => HTTP::Header.new()對(duì)象, 所以我們很容易想到, 當(dāng)我們創(chuàng)建 request 對(duì)象時(shí), 可以設(shè)置 HTTP::Header 對(duì)象的屬性值。

至于 HTTP::Header 對(duì)象的方法, 我們一會(huì)再說。 先看看 request 對(duì)象的方法:

> $r.^methods; (new set-method uri host port scheme add-cookies add-content add-form-data form-data make-boundary S tr parse method url file add-content remove-field content-encoding push-field protocol text-types in flate-content decoded-content AUTOGEN parse header charset is-text Str content new clear content-typ e media-type is-binary binary) >

?

方法挺多, 這里只是說明幾個(gè)常用的, 比如設(shè)置Cookie, 設(shè)置Header。

?

0x1設(shè)置請(qǐng)求類型:

my $req = HTTP::Request.new;$req.set-method: 'POST';

你還可以設(shè)置成GET或HEAD之類的。

?

0x2設(shè)置請(qǐng)求的URL:

my $req = HTTP::Request.new;$req.uri: 'example.com';

?

0x3設(shè)置Cookie:

add-cookies(HTTP::Cookies $cookies)

上面說過HTTP::Cookies的用法, 如果你設(shè)置了一個(gè)HTTP::Cookies對(duì)象, 這里直接導(dǎo)入就行:

my $req = HTTP::Request.new; #my $c = HTTP::Cookies.new; #$c.set-cookie('Set-Cookie:user=root') $req.add-cookies($c)

?

0x4設(shè)置POST參數(shù):

my %data = :what<php>;#post my $r = HTTP::Request.new; $r.set-method: 'POST'; $r.add-form-data(%data);#添加post

?

0X5設(shè)置 HTTP::Header:

上面說到, 這個(gè)HTTP::Request對(duì)象的參數(shù)里包含了一個(gè) header => HTTP::Header.new()。而且它有個(gè)方法叫header, 我們可以先看看這個(gè)header方法是什么東西:

> my $r = HTTP::Request.new; HTTP::Request.new(method => HTTP::Request::RequestMethod, url => Any, file => Any, uri => Any, host => Str, port => Int, scheme => Str, header => HTTP::Header.new(fields => []), content => Any, protoc ol => "HTTP/1.1", binary => Bool::False, text-types => Array[Str].new()) > $r.^methods; (new set-method uri host port scheme add-cookies add-content add-form-data form-data make-boundary S tr parse method url file add-content remove-field content-encoding push-field protocol text-types in flate-content decoded-content AUTOGEN parse header charset is-text Str content new clear content-typ e media-type is-binary binary) > my $r = HTTP::Request.new; HTTP::Request.new(method => HTTP::Request::RequestMethod, url => Any, file => Any, uri => Any, host => Str, port => Int, scheme => Str, header => HTTP::Header.new(fields => []), content => Any, protoc ol => "HTTP/1.1", binary => Bool::False, text-types => Array[Str].new()) > $r.header.WHAT (Header) > $r.header.^methods (new field init-field push-field remove-field header-field-names hash clear Str parse fields) >

可以看到, 這個(gè) $r.header 就是一個(gè)HTTP::Header對(duì)象。(HTTP::Header對(duì)象設(shè)置HEADER信息后面有說)

怎么設(shè)置Header信息呢?很簡(jiǎn)間, 下面是一個(gè)例子:

$r.header.field(:user-Agent<this is a ie>);#設(shè)置頭部信息

把你要設(shè)置的header信息當(dāng)成一個(gè)字典傳入到$r.header.field()當(dāng)參數(shù)就行

我們還可以在創(chuàng)建對(duì)象時(shí)設(shè)置GET/POST與HEADER信息:

?

multi method new(*%args) multi method new(Str $method, URI $uri, HTTP::Header $header); A constructor, the first form takes parameters like: =item method => URL, where method can be POST, GET ... etc. =item field => values, header fields my $req = HTTP::Request.new(:GET<example.com>, :h1<v1>);

?

?

?

?

0x6使用這個(gè)HTTP::Request對(duì)象:

如果我們把我們要設(shè)置的都設(shè)置完了, 準(zhǔn)備發(fā)送請(qǐng)求, 可以這樣發(fā)送:

my $u = HTTP::UserAgent.new; my $result = $u.request($r);

?

現(xiàn)在來說說 HTTP::Header。

方法:

new field init-field push-field remove-field header-field-names hash clear Str parse fields

?

0x1 field設(shè)置:

use HTTP::Header; my $h = HTTP::Header.new; $h.field(Accept => 'text/plain'); say $h.field('Accept'); $h.remove-field('Accept');

0x2 在new 時(shí)設(shè)置:

my $head = HTTP::Header.new(:h1<v1>, :h2<v2>);

?

0x3 push-header:

文檔里有這個(gè)方法, 但本人沒測(cè)試成功。

my $head = HTTP::Header.new; $head.push-header( HTTP::Header::Field.new(:name<n1>, :value<v1>) ); say ~$head;

也就是說, 用push-header導(dǎo)入一個(gè)HTTP::Header::Field對(duì)象, 這個(gè)對(duì)象設(shè)置header時(shí)可以用如下方法:

use HTTP::Header::Field; my $header = HTTP::Header::Field.new(:name<Date>, values => (123, 456));

注意這個(gè) name, values 關(guān)鍵字是固定的。

0x4清除設(shè)置的header:

my $head = HTTP::Header.new(:h1<v1>, :h2<v2>); $head.clear;

?

一般來說, 你知道HTTP::Header方法后, 當(dāng)你創(chuàng)建一個(gè)HTTP::Request后, 就可以直接用? $request.header.field(:user-agent<firefox>) 這種型式設(shè)置即可。

?

HTTP::UserAgent

0x1 GET請(qǐng)求:

my $u = HTTP::UserAgent.new; my $result = $u.get($url);

0x2 POST請(qǐng)求:

my $u = HTTP::UserAgent.new; my %data = :user<root>,:password<password>; my $result = $u.post($url, %data);

0x3設(shè)置HEADER信息:

我們可以不先創(chuàng)建request,再用request設(shè)置好header后,再導(dǎo)入request到HTTP::UserAgent中用$u.request($request)去請(qǐng)求。我們可以在GET/POST請(qǐng)求時(shí)設(shè)置好HEADER。

下面是get的方法定義

multi method get(Str $url is copy, :bin?, *%headers) returns HTTP::Response multi method get(URI $uri, :bin?, *%headers) returns HTTP::Response

下面是post方法定義

multi method post(URI $uri, %form, *%header ) -> HTTP::Response multi method post(Str $uri, %form, *%header ) -> HTTP::Response

可以看到, get/post請(qǐng)求時(shí), 都有一個(gè)%header字典, 那我們就可以這樣設(shè)置:

> my $result =$a.get('http://localhost/1.php', :user-agent<ooooooooooooo>) > my $result =$a.post('http://localhost/1.php', (:a<1>),:user-agent<ooooooooooooo>)

注意POST請(qǐng)求時(shí)第二個(gè)參數(shù)是必須要有的, 這個(gè)就是POST的數(shù)據(jù), 而第三個(gè)參數(shù)是一個(gè)收集型的hash的設(shè)置, 是設(shè)置header用的, 收集型參數(shù)可以不傳送數(shù)據(jù)。

?

0x4設(shè)置COOKIE:

我們看一下HTTP::UserAgent的對(duì)象:

> $a HTTP::UserAgent.new(timeout => 180, useragent => Any, cookies => HTTP::Cookies.new(cookies => [], fi le => "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\mKsrWNHtC8", autosave => 1), auth_login => Any, au th_password => Any, max-redirects => 5, redirects-in-a-row => 0, throw-exceptions => Bool, debug => Any, debug-handle => IO::Handle, http-proxy => Any, no-proxy => []) >

可以看到, 里面有一個(gè) cookies => HTTP::Cookies, 我們看一下 HTTP::UserAgent的方法有哪些:

> $a.^methods (BUILD auth get post request get-content get-chunked-content get-response get-connection is-cgi get- proxy no-proxy use-proxy setup-auth use-auth timeout useragent cookies auth_login auth_password max- redirects redirects-in-a-row throw-exceptions debug debug-handle http-proxy) >

里面有一個(gè)cookies方法, 我們可以查看一下這個(gè)方法是什么:

> $a.cookies; HTTP::Cookies.new(cookies => [], file => "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\mKsrWNHtC8", au tosave => 1) > $a.cookies.WHAT; (Cookies) > $a.cookies.^methods; (extract-cookies add-cookie-header save load clear-expired clear set-cookie push-cookie Str cookies file autosave) >

這個(gè)原來就是前面所說的HTTP::Cookies對(duì)象。

所以設(shè)置cookies時(shí), 我們可以這樣設(shè)置:

?

$a.cookies.set-cookie('Set-Cookie:a=1')

?

0x5 request方法:

HTTP::UserAgent里有一個(gè)request方法, 這個(gè)方法就是用來導(dǎo)入前面所說的HTTP::Request對(duì)象用的:

my $r = HTTP::Request.new; #do something my $ua = HTTP::UserAgent.new; my $result = $ua.request($r);

?

?

?

HTTP::Response響應(yīng)對(duì)象

> my $rp = HTTP::Response.new HTTP::Response.new(status-line => "200 OK", code => 200, request => HTTP::Request, header => HTTP::H eader.new(fields => []), content => Any, protocol => "HTTP/1.1", binary => Bool::False, text-types = > Array[Str].new()) > $rp.^methods; (BUILD new content-length is-success has-content is-chunked set-code next-request Str status-line co de request add-content remove-field content-encoding push-field protocol text-types inflate-content decoded-content AUTOGEN parse header charset is-text Str content new clear content-type media-type i s-binary binary) >

?

上面是它的對(duì)象方法

0x1獲取響應(yīng)狀態(tài)碼:

> $rp.status-line; 200 OK >

?

0x2獲取返回內(nèi)容:

> $result.content <pre>array(0) { } array(0) { } ooooooooooooo > $result.Str HTTP/1.1 200 OK Date: Fri, 07 Jul 2017 15:51:43 GMT Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j mod_fcgid/2.3.9 X-Powered-By: PHP/5.3.29 Connection: close Transfer-Encoding: chunked Content-Type: text/html<pre>array(0) { } array(0) { } ooooooooooooo>

可以用content或Str

有時(shí)可能也要用到decoded-content:

> $result.decoded-content <pre>array(0) { } array(0) { } ooooooooooooo >

?

?

?>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 提示: get/post方法中, url不要有空格, 空格要用%20代替, 否則會(huì)報(bào)錯(cuò)。

如果要查看設(shè)置好后的包數(shù)據(jù), 可以像這樣:

?


這里的$html為response對(duì)像
> $html.request.WHAT (Request) > $html.request.^methods (new set-method uri host port scheme add-cookies add-content add-form-data form-data make-boundary S tr parse method url file add-content remove-field content-encoding push-field protocol text-types in flate-content decoded-content AUTOGEN parse header charset is-text Str content new clear content-typ e media-type is-binary binary) > $html.request.host localhost > $html.request.Str POST /1.php HTTP/1.1 Host: localhost Content-Length: 11 Content-Type: application/x-www-form-urlencoded Connection: close5=6&1=2&3=4>
當(dāng)然 , 如果$r為request對(duì)像, 也可以像下面這樣查。
> $r.Str
POST /1.php HTTP/1.1
Host: localhost
Content-Length: 11
Content-Type: application/x-www-form-urlencoded
Connection: close

5=6&1=2&3=4


?

?

?

?

?

?

參考鏈接:

https://github.com/sergot/http-useragent

?

轉(zhuǎn)載于:https://www.cnblogs.com/perl6/p/7134600.html

總結(jié)

以上是生活随笔為你收集整理的perl6 HTTP::UserAgent (2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 影音先锋在线中文字幕 | 亚洲最大福利 | 久操网站| 99久久婷婷国产综合精品电影 | 午夜香蕉视频 | 欧美性爱视频久久 | 天堂网在线最新版www中文网 | 亚洲天堂777 | 日韩精品偷拍 | 免费看av毛片| 一级片免费在线播放 | 欧美专区视频 | 国产精品久久久久毛片大屁完整版 | 自拍偷拍第二页 | 欧美成人午夜 | 欧美一级片a | 国产免费叼嘿网站免费 | 爱爱三级视频 | 国产一国产精品一级毛片 | 露脸丨91丨九色露脸 | 欧美日韩久久久久 | 久久青娱乐 | 亚洲黄色在线网站 | 日韩大片免费观看视频播放 | 在线观看视频国产 | 国产女人18毛片水真多1 | 国产亚洲精品久久久久四川人 | 影音先锋精品 | 日韩有码在线播放 | 日本免费三区 | 无套日出白浆 | 国产精品成人一区二区 | 久久精品一区二区免费播放 | 久久成人人人人精品欧 | 最新中文字幕在线视频 | 黄色网页网站 | 91精彩视频| 国产传媒一级片 | 天堂网av中文字幕 | 黄色一级片视频 | 久久国产网 | 日韩插插 | 严厉高冷老师动漫播放 | 黄色成人在线播放 | 成人久草 | 韩国美女一区二区 | 伊人伊人伊人伊人 | 亚洲最大毛片 | 色射射 | 亚洲精品国产精品国自产在线 | 中文字幕一区二区三区乱码在线 | 日韩天堂网 | 欧美日韩a级| 欧美午夜性春猛交 | 女人一级一片30分 | 午夜久久久久久久久久久 | 久久久亚洲欧洲 | 人妻射精一区二区 | 精品国产乱码久久久久夜深人妻 | 天天草综合 | 按摩ⅹxxx性hd中国 | 亚洲性在线 | 久久久久久久久精 | www黄色网 | 黄视频免费在线观看 | 久久久精品一区二区 | 琪琪在线视频 | 欧美偷拍精品 | 麻豆亚洲av成人无码久久精品 | 午夜激情在线观看 | 成人做爰69片免费看 | 怎么可能高潮了就结束漫画 | 精品免费在线视频 | 国产乱人伦精品一区二区 | 亚洲国产日韩a在线播放性色 | 欧美成人视屏 | 亲子乱aⅴ一区二区三区 | 久久久久久av无码免费网站下载 | 欧美二区在线观看 | 精品99999 | 91毛片网| 日韩一区二区视频在线播放 | 人人插人人澡 | 激情亚洲网 | 四虎在线观看视频 | 丁香激情综合 | 一区二区免费av | 国产女人在线视频 | 欧美国产高潮xxxx1819 | 亚洲精品www久久久久久 | 97视频网址 | 欧美国产日韩视频 | 亚洲第一男人天堂 | 日本三级黄色录像 | 亚洲欧洲日本一区二区三区 | 91精品国产综合久久久久久 | 日本www在线观看 | 成人综合网站 | 人人干人人插 |