⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 http.html

📁 perl教程
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<?xml version="1.0" ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<!-- saved from url=(0017)http://localhost/ -->
<script language="JavaScript" src="../../../displayToc.js"></script>
<script language="JavaScript" src="../../../tocParas.js"></script>
<script language="JavaScript" src="../../../tocTab.js"></script>
<link rel="stylesheet" type="text/css" href="../../../scineplex.css">
<title>SOAP::Transport::HTTP - Server/Client side HTTP support for SOAP::Lite</title>
<link rel="stylesheet" href="../../../Active.css" type="text/css" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:" />
</head>

<body>

<script>writelinks('__top__',3);</script>
<h1><a>SOAP::Transport::HTTP - Server/Client side HTTP support for SOAP::Lite</a></h1>
<p><a name="__index__"></a></p>

<!-- INDEX BEGIN -->

<ul>

	<li><a href="#name">NAME</a></li>
	<li><a href="#synopsis">SYNOPSIS</a></li>
	<li><a href="#description">DESCRIPTION</a></li>
	<ul>

		<li><a href="#proxy_settings">PROXY SETTINGS</a></li>
		<li><a href="#cookiebased_authentication">COOKIE-BASED AUTHENTICATION</a></li>
		<li><a href="#ssl_certificate_authentication">SSL CERTIFICATE AUTHENTICATION</a></li>
		<li><a href="#compression">COMPRESSION</a></li>
	</ul>

	<li><a href="#examples">EXAMPLES</a></li>
	<li><a href="#troubleshooting">TROUBLESHOOTING</a></li>
	<li><a href="#dependencies">DEPENDENCIES</a></li>
	<li><a href="#see_also">SEE ALSO</a></li>
	<li><a href="#copyright">COPYRIGHT</a></li>
	<li><a href="#author">AUTHOR</a></li>
</ul>
<!-- INDEX END -->

<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>SOAP::Transport::HTTP - Server/Client side HTTP support for SOAP::Lite</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<dl>
<dt><strong><a name="item_client">Client</a></strong>

<dd>
<pre>
  <span class="keyword">use</span> <span class="variable">SOAP::Lite</span>
    <span class="string">uri</span> <span class="operator">=&gt;</span> <span class="string">'http://my.own.site.com/My/Examples'</span><span class="operator">,</span>
    <span class="string">proxy</span> <span class="operator">=&gt;</span> <span class="string">'http://localhost/'</span><span class="operator">,</span>
  <span class="comment"># proxy =&gt; 'http://localhost/cgi-bin/soap.cgi', # local CGI server</span>
  <span class="comment"># proxy =&gt; 'http://localhost/',                 # local daemon server</span>
  <span class="comment"># proxy =&gt; 'http://localhost/soap',             # local mod_perl server</span>
  <span class="comment"># proxy =&gt; 'https://localhost/soap',            # local mod_perl SECURE server</span>
  <span class="comment"># proxy =&gt; 'http://login:password@localhost/cgi-bin/soap.cgi', # local CGI server with authentication</span>
  <span class="operator">;</span>
</pre>
</dd>
<dd>
<pre>
  <span class="keyword">print</span> <span class="variable">getStateName</span><span class="operator">(</span><span class="number">1</span><span class="operator">);</span>
</pre>
</dd>
<dt><strong><a name="item_cgi_server">CGI server</a></strong>

<dd>
<pre>
  <span class="keyword">use</span> <span class="variable">SOAP::Transport::HTTP</span><span class="operator">;</span>
</pre>
</dd>
<dd>
<pre>
  <span class="variable">SOAP::Transport::HTTP::CGI</span>
    <span class="comment"># specify path to My/Examples.pm here</span>
    <span class="operator">-&gt;</span> <span class="variable">dispatch_to</span><span class="operator">(</span><span class="string">'/Your/Path/To/Deployed/Modules'</span><span class="operator">,</span> <span class="string">'Module::Name'</span><span class="operator">,</span> <span class="string">'Module::method'</span><span class="operator">)</span>
    <span class="operator">-&gt;</span> <span class="variable">handle</span>
  <span class="operator">;</span>
</pre>
</dd>
<dt><strong><a name="item_daemon_server">Daemon server</a></strong>

<dd>
<pre>
  <span class="keyword">use</span> <span class="variable">SOAP::Transport::HTTP</span><span class="operator">;</span>
</pre>
</dd>
<dd>
<pre>
  <span class="comment"># change LocalPort to 81 if you want to test it with soapmark.pl</span>
</pre>
</dd>
<dd>
<pre>
  <span class="keyword">my</span> <span class="variable">$daemon</span> <span class="operator">=</span> <span class="variable">SOAP::Transport::HTTP::Daemon</span>
    <span class="operator">-&gt;</span> <span class="variable">new</span> <span class="operator">(</span><span class="string">LocalAddr</span> <span class="operator">=&gt;</span> <span class="string">'localhost'</span><span class="operator">,</span> <span class="string">LocalPort</span> <span class="operator">=&gt;</span> <span class="number">80</span><span class="operator">)</span>
    <span class="comment"># specify list of objects-by-reference here</span>
    <span class="operator">-&gt;</span> <span class="variable">objects_by_reference</span><span class="operator">(</span><span class="string">qw(My::PersistentIterator My::SessionIterator My::Chat)</span><span class="operator">)</span>
    <span class="comment"># specify path to My/Examples.pm here</span>
    <span class="operator">-&gt;</span> <span class="variable">dispatch_to</span><span class="operator">(</span><span class="string">'/Your/Path/To/Deployed/Modules'</span><span class="operator">,</span> <span class="string">'Module::Name'</span><span class="operator">,</span> <span class="string">'Module::method'</span><span class="operator">)</span>
  <span class="operator">;</span>
  <span class="keyword">print</span> <span class="string">"Contact to SOAP server at "</span><span class="operator">,</span> <span class="variable">$daemon</span><span class="operator">-&gt;</span><span class="variable">url</span><span class="operator">,</span> <span class="string">"\n"</span><span class="operator">;</span>
  <span class="variable">$daemon</span><span class="operator">-&gt;</span><span class="variable">handle</span><span class="operator">;</span>
</pre>
</dd>
<dt><strong><a name="item_apache_mod_perl_server">Apache mod_perl server</a></strong>

<dd>
<p>See <em>examples/server/Apache.pm</em> and <a href="#examples">EXAMPLES</a> section for more information.</p>
</dd>
</li>
<dt><strong><a name="item_server">mod_soap server (.htaccess, directory-based access)</a></strong>

<dd>
<pre>
  SetHandler perl-script
  PerlHandler Apache::SOAP
  PerlSetVar dispatch_to &quot;/Your/Path/To/Deployed/Modules, Module::Name, Module::method&quot;
  PerlSetVar options &quot;compress_threshold =&gt; 10000&quot;</pre>
</dd>
<dd>
<p>See <a href="../../../lib/Apache/SOAP.html">the Apache::SOAP manpage</a> for more information.</p>
</dd>
</dl>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>This class encapsulates all HTTP related logic for a SOAP server,
independent of what web server it's attached to.
If you want to use this class you should follow simple guideline
mentioned above.</p>
<p>Following methods are available:</p>
<dl>
<dt><strong><a name="item_on_action"><code>on_action()</code></a></strong>

<dd>
<p>on_action method lets you specify SOAPAction understanding. It accepts
reference to subroutine that takes three parameters:</p>
</dd>
<dd>
<pre>
  SOAPAction, method_uri and method_name.</pre>
</dd>
<dd>
<p><code>SOAPAction</code> is taken from HTTP header and method_uri and method_name are
extracted from request's body. Default behavior is match <code>SOAPAction</code> if
present and ignore it otherwise. You can specify you own, for example
die if <code>SOAPAction</code> doesn't match with following code:</p>
</dd>
<dd>
<pre>
  <span class="variable">$server</span><span class="operator">-&gt;</span><span class="variable">on_action</span><span class="operator">(</span><span class="keyword">sub</span><span class="variable"> </span><span class="operator">{</span>
    <span class="operator">(</span><span class="keyword">my</span> <span class="variable">$action</span> <span class="operator">=</span> <span class="keyword">shift</span><span class="operator">)</span> <span class="operator">=~</span> <span class="regex">s/^("?)(.+)\1$/$2/</span><span class="operator">;</span>
    <span class="keyword">die</span> <span class="string">"SOAPAction shall match 'uri#method'\n"</span> <span class="keyword">if</span> <span class="variable">$action</span> <span class="keyword">ne</span> <span class="keyword">join</span> <span class="string">'#'</span><span class="operator">,</span> <span class="variable">@_</span><span class="operator">;</span>
  <span class="operator">});</span>
</pre>
</dd>
</li>
<dt><strong><a name="item_dispatch_to"><code>dispatch_to()</code></a></strong>

<dd>
<p>dispatch_to lets you specify where you want to dispatch your services
to. More precisely, you can specify <a href="../../../lib/Pod/perlrun.html#item_path"><code>PATH</code></a>, <code>MODULE</code>, <code>method</code> or
combination <code>MODULE::method</code>. Example:</p>
</dd>
<dd>
<pre>
  <span class="variable">dispatch_to</span><span class="operator">(</span>
    <span class="string">'PATH/'</span><span class="operator">,</span>          <span class="comment"># dynamic: load anything from there, any module, any method</span>
    <span class="string">'MODULE'</span><span class="operator">,</span>         <span class="comment"># static: any method from this module</span>
    <span class="string">'MODULE::method'</span><span class="operator">,</span> <span class="comment"># static: specified method from this module</span>
    <span class="string">'method'</span><span class="operator">,</span>         <span class="comment"># static: specified method from main::</span>
  <span class="operator">);</span>
</pre>
</dd>
<dd>
<p>If you specify <code>PATH/</code> name of module/classes will be taken from uri as
path component and converted to Perl module name with substitution
'::' for '/'. Example:</p>
</dd>
<dd>
<pre>
  urn:My/Examples              =&gt; My::Examples
  urn://localhost/My/Examples  =&gt; My::Examples
  <a href="http://localhost/My/Examples">http://localhost/My/Examples</a> =&gt; My::Examples</pre>
</dd>
<dd>
<p>For consistency first '/' in the path will be ignored.</p>
</dd>
<dd>
<p>According to this scheme to deploy new class you should put this
class in one of the specified directories and enjoy its services.
Easy, eh?</p>
</dd>
</li>
<dt><strong><a name="item_handle"><code>handle()</code></a></strong>

<dd>
<p>handle method will handle your request. You should provide parameters
with <a href="#item_request"><code>request()</code></a> method, call <a href="#item_handle"><code>handle()</code></a> and get it back with <a href="#item_response"><code>response()</code></a> .</p>
</dd>
</li>
<dt><strong><a name="item_request"><code>request()</code></a></strong>

<dd>
<p>request method gives you access to HTTP::Request object which you
can provide for Server component to handle request.</p>
</dd>
</li>
<dt><strong><a name="item_response"><code>response()</code></a></strong>

<dd>
<p>response method gives you access to HTTP::Response object which
you can access to get results from Server component after request was
handled.</p>
</dd>
</li>
</dl>
<p>
</p>
<h2><a name="proxy_settings">PROXY SETTINGS</a></h2>
<p>You can use any proxy setting you use with LWP::UserAgent modules:</p>
<pre>
 <span class="variable">SOAP::Lite</span><span class="operator">-&gt;</span><span class="variable">proxy</span><span class="operator">(</span><span class="string">'http://endpoint.server/'</span><span class="operator">,</span>
                   <span class="string">proxy</span> <span class="operator">=&gt;</span> <span class="operator">[</span><span class="string">'http'</span> <span class="operator">=&gt;</span> <span class="string">'http://my.proxy.server'</span><span class="operator">]</span><span class="operator">);</span>
</pre>
<p>or</p>
<pre>
 <span class="variable">$soap</span><span class="operator">-&gt;</span><span class="variable">transport</span><span class="operator">-&gt;</span><span class="variable">proxy</span><span class="operator">(</span><span class="string">'http'</span> <span class="operator">=&gt;</span> <span class="string">'http://my.proxy.server'</span><span class="operator">);</span>
</pre>
<p>should specify proxy server for you. And if you use <code>HTTP_proxy_user</code>
and <code>HTTP_proxy_pass</code> for proxy authorization SOAP::Lite should know
how to handle it properly.</p>
<p>
</p>
<h2><a name="cookiebased_authentication">COOKIE-BASED AUTHENTICATION</a></h2>
<pre>
  <span class="keyword">use</span> <span class="variable">HTTP::Cookies</span><span class="operator">;</span>
</pre>
<pre>
  <span class="keyword">my</span> <span class="variable">$cookies</span> <span class="operator">=</span> <span class="variable">HTTP::Cookies</span><span class="operator">-&gt;</span><span class="variable">new</span><span class="operator">(</span><span class="string">ignore_discard</span> <span class="operator">=&gt;</span> <span class="number">1</span><span class="operator">);</span>
    <span class="comment"># you may also add 'file' if you want to keep them between sessions</span>
</pre>
<pre>
  <span class="keyword">my</span> <span class="variable">$soap</span> <span class="operator">=</span> <span class="variable">SOAP::Lite</span><span class="operator">-&gt;</span><span class="variable">proxy</span><span class="operator">(</span><span class="string">'http://localhost/'</span><span class="operator">);</span>
  <span class="variable">$soap</span><span class="operator">-&gt;</span><span class="variable">transport</span><span class="operator">-&gt;</span><span class="variable">cookie_jar</span><span class="operator">(</span><span class="variable">$cookies</span><span class="operator">);</span>
</pre>
<p>Cookies will be taken from response and provided for request. You may
always add another cookie (or extract what you need after response)
with HTTP::Cookies interface.</p>
<p>You may also do it in one line:</p>
<pre>
  <span class="variable">$soap</span><span class="operator">-&gt;</span><span class="variable">proxy</span><span class="operator">(</span><span class="string">'http://localhost/'</span><span class="operator">,</span>
               <span class="string">cookie_jar</span> <span class="operator">=&gt;</span> <span class="variable">HTTP::Cookies</span><span class="operator">-&gt;</span><span class="variable">new</span><span class="operator">(</span><span class="string">ignore_discard</span> <span class="operator">=&gt;</span> <span class="number">1</span><span class="operator">));</span>
</pre>
<p>
</p>
<h2><a name="ssl_certificate_authentication">SSL CERTIFICATE AUTHENTICATION</a></h2>
<p>To get certificate authentication working you need to specify three
environment variables: <code>HTTPS_CERT_FILE</code>, <code>HTTPS_KEY_FILE</code>, and
(optionally) <code>HTTPS_CERT_PASS</code>:</p>
<pre>
  <span class="variable">$ENV</span><span class="operator">{</span><span class="string">HTTPS_CERT_FILE</span><span class="operator">}</span> <span class="operator">=</span> <span class="string">'client-cert.pem'</span><span class="operator">;</span>
  <span class="variable">$ENV</span><span class="operator">{</span><span class="string">HTTPS_KEY_FILE</span><span class="operator">}</span>  <span class="operator">=</span> <span class="string">'client-key.pem'</span><span class="operator">;</span>
</pre>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -