lwpcook.html
来自「perl教程」· HTML 代码 · 共 364 行 · 第 1/3 页
HTML
364 行
document type, the size of the document, and the age of the document.</p>
<p>More control over the request or access to all header values returned
require that you use the object oriented interface described for GET
above. Just s/GET/HEAD/g.</p>
<p>
</p>
<hr />
<h1><a name="post">POST</a></h1>
<p>There is no simple procedural interface for posting data to a WWW server. You
must use the object oriented interface for this. The most common POST
operation is to access a WWW form application:</p>
<pre>
<span class="keyword">use</span> <span class="variable">LWP::UserAgent</span><span class="operator">;</span>
<span class="variable">$ua</span> <span class="operator">=</span> <span class="variable">LWP::UserAgent</span><span class="operator">-></span><span class="variable">new</span><span class="operator">;</span>
</pre>
<pre>
<span class="keyword">my</span> <span class="variable">$req</span> <span class="operator">=</span> <span class="variable">HTTP::Request</span><span class="operator">-></span><span class="variable">new</span><span class="operator">(</span><span class="string">POST</span> <span class="operator">=></span> <span class="string">'http://www.perl.com/cgi-bin/BugGlimpse'</span><span class="operator">);</span>
<span class="variable">$req</span><span class="operator">-></span><span class="variable">content_type</span><span class="operator">(</span><span class="string">'application/x-www-form-urlencoded'</span><span class="operator">);</span>
<span class="variable">$req</span><span class="operator">-></span><span class="variable">content</span><span class="operator">(</span><span class="string">'match=www&errors=0'</span><span class="operator">);</span>
</pre>
<pre>
<span class="keyword">my</span> <span class="variable">$res</span> <span class="operator">=</span> <span class="variable">$ua</span><span class="operator">-></span><span class="variable">request</span><span class="operator">(</span><span class="variable">$req</span><span class="operator">);</span>
<span class="keyword">print</span> <span class="variable">$res</span><span class="operator">-></span><span class="variable">as_string</span><span class="operator">;</span>
</pre>
<p>Lazy people use the HTTP::Request::Common module to set up a suitable
POST request message (it handles all the escaping issues) and has a
suitable default for the content_type:</p>
<pre>
<span class="keyword">use</span> <span class="variable">HTTP::Request::Common</span> <span class="string">qw(POST)</span><span class="operator">;</span>
<span class="keyword">use</span> <span class="variable">LWP::UserAgent</span><span class="operator">;</span>
<span class="variable">$ua</span> <span class="operator">=</span> <span class="variable">LWP::UserAgent</span><span class="operator">-></span><span class="variable">new</span><span class="operator">;</span>
</pre>
<pre>
<span class="keyword">my</span> <span class="variable">$req</span> <span class="operator">=</span> <span class="variable">POST</span> <span class="string">'http://www.perl.com/cgi-bin/BugGlimpse'</span><span class="operator">,</span>
<span class="operator">[</span> <span class="string">search</span> <span class="operator">=></span> <span class="string">'www'</span><span class="operator">,</span> <span class="string">errors</span> <span class="operator">=></span> <span class="number">0</span> <span class="operator">]</span><span class="operator">;</span>
</pre>
<pre>
<span class="keyword">print</span> <span class="variable">$ua</span><span class="operator">-></span><span class="variable">request</span><span class="operator">(</span><span class="variable">$req</span><span class="operator">)-></span><span class="variable">as_string</span><span class="operator">;</span>
</pre>
<p>The lwp-request program (alias POST) that is distributed with the
library can also be used for posting data.</p>
<p>
</p>
<hr />
<h1><a name="proxies">PROXIES</a></h1>
<p>Some sites use proxies to go through fire wall machines, or just as
cache in order to improve performance. Proxies can also be used for
accessing resources through protocols not supported directly (or
supported badly :-) by the libwww-perl library.</p>
<p>You should initialize your proxy setting before you start sending
requests:</p>
<pre>
<span class="keyword">use</span> <span class="variable">LWP::UserAgent</span><span class="operator">;</span>
<span class="variable">$ua</span> <span class="operator">=</span> <span class="variable">LWP::UserAgent</span><span class="operator">-></span><span class="variable">new</span><span class="operator">;</span>
<span class="variable">$ua</span><span class="operator">-></span><span class="variable">env_proxy</span><span class="operator">;</span> <span class="comment"># initialize from environment variables</span>
<span class="comment"># or</span>
<span class="variable">$ua</span><span class="operator">-></span><span class="variable">proxy</span><span class="operator">(</span><span class="string">ftp</span> <span class="operator">=></span> <span class="string">'http://proxy.myorg.com'</span><span class="operator">);</span>
<span class="variable">$ua</span><span class="operator">-></span><span class="variable">proxy</span><span class="operator">(</span><span class="string">wais</span> <span class="operator">=></span> <span class="string">'http://proxy.myorg.com'</span><span class="operator">);</span>
<span class="variable">$ua</span><span class="operator">-></span><span class="variable">no_proxy</span><span class="operator">(</span><span class="string">qw(no se fi)</span><span class="operator">);</span>
</pre>
<pre>
<span class="keyword">my</span> <span class="variable">$req</span> <span class="operator">=</span> <span class="variable">HTTP::Request</span><span class="operator">-></span><span class="variable">new</span><span class="operator">(</span><span class="string">GET</span> <span class="operator">=></span> <span class="string">'wais://xxx.com/'</span><span class="operator">);</span>
<span class="keyword">print</span> <span class="variable">$ua</span><span class="operator">-></span><span class="variable">request</span><span class="operator">(</span><span class="variable">$req</span><span class="operator">)-></span><span class="variable">as_string</span><span class="operator">;</span>
</pre>
<p>The LWP::Simple interface will call <code>env_proxy()</code> for you automatically.
Applications that use the $ua-><code>env_proxy()</code> method will normally not
use the $ua-><code>proxy()</code> and $ua-><code>no_proxy()</code> methods.</p>
<p>Some proxies also require that you send it a username/password in
order to let requests through. You should be able to add the
required header, with something like this:</p>
<pre>
<span class="keyword">use</span> <span class="variable">LWP::UserAgent</span><span class="operator">;</span>
</pre>
<pre>
<span class="variable">$ua</span> <span class="operator">=</span> <span class="variable">LWP::UserAgent</span><span class="operator">-></span><span class="variable">new</span><span class="operator">;</span>
<span class="variable">$ua</span><span class="operator">-></span><span class="variable">proxy</span><span class="operator">(</span><span class="operator">[</span><span class="string">'http'</span><span class="operator">,</span> <span class="string">'ftp'</span><span class="operator">]</span> <span class="operator">=></span> <span class="string">'http://username:password@proxy.myorg.com'</span><span class="operator">);</span>
</pre>
<pre>
<span class="variable">$req</span> <span class="operator">=</span> <span class="variable">HTTP::Request</span><span class="operator">-></span><span class="variable">new</span><span class="operator">(</span><span class="string">'GET'</span><span class="operator">,</span><span class="string">"http://www.perl.com"</span><span class="operator">);</span>
</pre>
<pre>
<span class="variable">$res</span> <span class="operator">=</span> <span class="variable">$ua</span><span class="operator">-></span><span class="variable">request</span><span class="operator">(</span><span class="variable">$req</span><span class="operator">);</span>
<span class="keyword">print</span> <span class="variable">$res</span><span class="operator">-></span><span class="variable">decoded_content</span> <span class="keyword">if</span> <span class="variable">$res</span><span class="operator">-></span><span class="variable">is_success</span><span class="operator">;</span>
</pre>
<p>Replace <code>proxy.myorg.com</code>, <code>username</code> and
<code>password</code> with something suitable for your site.</p>
<p>
</p>
<hr />
<h1><a name="access_to_protected_documents">ACCESS TO PROTECTED DOCUMENTS</a></h1>
<p>Documents protected by basic authorization can easily be accessed
like this:</p>
<pre>
<span class="keyword">use</span> <span class="variable">LWP::UserAgent</span><span class="operator">;</span>
<span class="variable">$ua</span> <span class="operator">=</span> <span class="variable">LWP::UserAgent</span><span class="operator">-></span><span class="variable">new</span><span class="operator">;</span>
<span class="variable">$req</span> <span class="operator">=</span> <span class="variable">HTTP::Request</span><span class="operator">-></span><span class="variable">new</span><span class="operator">(</span><span class="string">GET</span> <span class="operator">=></span> <span class="string">'http://www.linpro.no/secret/'</span><span class="operator">);</span>
<span class="variable">$req</span><span class="operator">-></span><span class="variable">authorization_basic</span><span class="operator">(</span><span class="string">'aas'</span><span class="operator">,</span> <span class="string">'mypassword'</span><span class="operator">);</span>
<span class="keyword">print</span> <span class="variable">$ua</span><span class="operator">-></span><span class="variable">request</span><span class="operator">(</span><span class="variable">$req</span><span class="operator">)-></span><span class="variable">as_string</span><span class="operator">;</span>
</pre>
<p>The other alternative is to provide a subclass of <em>LWP::UserAgent</em> that
overrides the <code>get_basic_credentials()</code> method. Study the <em>lwp-request</em>
program for an example of this.</p>
<p>
</p>
<hr />
<h1><a name="cookies">COOKIES</a></h1>
<p>Some sites like to play games with cookies. By default LWP ignores
cookies provided by the servers it visits. LWP will collect cookies
and respond to cookie requests if you set up a cookie jar.</p>
<pre>
<span class="keyword">use</span> <span class="variable">LWP::UserAgent</span><span class="operator">;</span>
<span class="keyword">use</span> <span class="variable">HTTP::Cookies</span><span class="operator">;</span>
</pre>
<pre>
<span class="variable">$ua</span> <span class="operator">=</span> <span class="variable">LWP::UserAgent</span><span class="operator">-></span><span class="variable">new</span><span class="operator">;</span>
<span class="variable">$ua</span><span class="operator">-></span><span class="variable">cookie_jar</span><span class="operator">(</span><span class="variable">HTTP::Cookies</span><span class="operator">-></span><span class="variable">new</span><span class="operator">(</span><span class="string">file</span> <span class="operator">=></span> <span class="string">"lwpcookies.txt"</span><span class="operator">,</span>
<span class="string">autosave</span> <span class="operator">=></span> <span class="number">1</span><span class="operator">));</span>
</pre>
<pre>
<span class="comment"># and then send requests just as you used to do</span>
<span class="variable">$res</span> <span class="operator">=</span> <span class="variable">$ua</span><span class="operator">-></span><span class="variable">request</span><span class="operator">(</span><span class="variable">HTTP::Request</span><span class="operator">-></span><span class="variable">new</span><span class="operator">(</span><span class="string">GET</span> <span class="operator">=></span> <span class="string">"http://www.yahoo.no"</span><span class="operator">));</span>
<span class="keyword">print</span> <span class="variable">$res</span><span class="operator">-></span><span class="variable">status_line</span><span class="operator">,</span> <span class="string">"\n"</span><span class="operator">;</span>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?