如何从现有类别中获取所有亚马逊产品?
使用API,我可以浏览10页并获得每页10个产品.
该类别有502348件产品,我想把它们全部搞定.
这是我的代码:
Amazon Product Advertising API <?php ?>
$params = array(
'Operation' => 'ItemSearch',
'SearchIndex'=>'Electronics',
//'BrowseNode'=>'281052',
'ResponseGroup'=>'small',
//'MerchantId' => 'All',
//'Condition'=>'New',
'ItemPage'=>'1471',
Run Code Online (Sandbox Code Playgroud) php amazon soap-client amazon-web-services amazon-product-api
如果有可能将HTTP标头添加到soap客户端Web服务调用,有人可以回答我.浏览互联网后,我发现的唯一的薄是如何添加SOAP标头.
代码如下所示:
var client =new MyServiceSoapClient();
//client.AddHttpHeader("myCustomHeader","myValue");//There's no such method, it's just for clearness
var res = await client.MyMethod();
Run Code Online (Sandbox Code Playgroud)
更新:
The request should look like this
POST https://service.com/Service.asmx HTTP/1.1
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://www.host.com/schemas/Authentication.xsd/Action"
Content-Length: 351
MyHeader: "myValue"
Expect: 100-continue
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header/>
<s:Body>
<myBody>BodyGoesHere</myBody>
</s:Body>
</s:Envelope>
Run Code Online (Sandbox Code Playgroud)
信封中的标题属性应为空
我遇到了一些不同的WSDL文件,其中包含一个元素和一个具有相同名称的complexType.例如,http://soap.search.msn.com/webservices.asmx?wsdl有两个名为"SearchResponse"的实体:
在这种情况下,我无法弄清楚如何使用SoapClient()"classmaps"选项将这些实体正确映射到PHP类.
PHP手册说:
classmap选项可用于将某些WSDL类型映射到PHP类.此选项必须是一个数组,其中WSDL类型作为键,PHP类的名称作为值.
不幸的是,由于有两个具有相同密钥的WSDL类型('SearchResponse'),我无法弄清楚如何区分两个SearchResponse实体并将它们分配给相应的PHP类.
例如,以下是示例WSDL的相关代码段:
<xsd:complexType name="SearchResponse">
<xsd:sequence>
<xsd:element minOccurs="1" maxOccurs="1" name="Responses" type="tns:ArrayOfSourceResponseResponses"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="SearchResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="1" maxOccurs="1" name="Response" type="tns:SearchResponse"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
Run Code Online (Sandbox Code Playgroud)
这里的PHP显然不起作用,因为类映射键是相同的:
<?php $server = new SoapClient("http://soap.search.msn.com/webservices.asmx?wsdl", array('classmap' => array('SearchResponse' => 'MySearchResponseElement', 'SearchResponse' => 'MySearchResponseComplexType'))); ?>
Run Code Online (Sandbox Code Playgroud)
在搜索解决方案时,我发现Java Web Services通过允许您为"Element"或"ComplexType"实体指定自定义后缀来处理此问题.
所以,现在我觉得没有办法用PHP的SoapClient做到这一点,但我很好奇是否有人可以提供任何建议.FWIW,我无法编辑远程WDSL.
有任何想法吗???
我正在尝试使用PHP的内置soap功能登录API.我得到了这样的结果.
[LoginResult]=> false,
[ErrorMsg] => Login failed with the reason : The security object is invalid
Run Code Online (Sandbox Code Playgroud)
这是API提供商所要求的.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<Login xmlns="http://tempuri.org/Example/Service1">
<objSecurity>
<WebProviderLoginId>test</WebProviderLoginId>
<WebProviderPassword>test</WebProviderPassword>
<IsAgent>false</IsAgent>
</objSecurity>
<OutPut />
<ErrorMsg />
</Login>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
&,这是我能够使用函数生成的.
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/Example/Service1">
<SOAP-ENV:Body>
<ns1:Login>
<objSecurity>
<WebProviderLoginId>test</WebProviderLoginId>
<WebProviderPassword>test</WebProviderPassword>
<IsAgent>false</IsAgent>
</objSecurity>
<OutPut/>
<ErrorMsg/>
</ns1:Login>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)
这是我用来发送请求的代码.
<?php
class objSecurity {
function objSecurity($s, $i, $f) {
$this->WebProviderLoginId = $s;
$this->WebProviderPassword = $i;
$this->IsAgent = $f;
}
}
class …Run Code Online (Sandbox Code Playgroud) 我使用soap.js在node.js中创建了一个soap客户端.Soap通过https进行通信.当我尝试连接时,我不断收到此错误
{[错误:自签名证书]代码:'DEPTH_ZERO_SELF_SIGNED_CERT'}
以下是我的代码
var url = '../public/test.wsdl';
var client = soap.createClient(url,sslOptions, function(err, client) {
client.setSecurity(new soap.WSSecurity('testuser', 'testpassword'));
client.CheckStatus(args, function(err, result) {
console.log(err);
// console.log(result);
});
});
Run Code Online (Sandbox Code Playgroud)
我也尝试了以下ssl设置,但没有成功
sslOptions = {
key: fs.readFileSync( '../certs/test-key.pem'),
cert: fs.readFileSync( '../certs/test-cert.pem'),
rejectUnauthorized : false,
secureOptions : constants.SSL_OP_NO_TLSv1_2,
strictSSL : false
};
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激 !!
我期待从Spring反应webclient进行SOAP调用.我找不到任何文件.想知道这个方法会是什么.现在我在想
有什么缺点和其他方法?
在PHP中,如果您尝试实例化一个新的SoapClient,并且无法访问WSDL(服务器关闭或其他),则会抛出PHP致命错误:
致命错误:SOAP-ERROR:解析WSDL:无法从" http://example.com/servlet/app/SomeService?wsdl "加载:无法加载外部实体" http://example.com/servlet/app/SomeService?wsdl "
据我所知,PHP中的致命错误无法恢复.
有什么方法可以退缩吗?这种致命错误能否以某种方式避免?
编辑:我应该说我在PHP 5.2上运行,如果它有任何区别.
我需要在我的SOAP请求中使用此节点(使用1.1):
<CredentialsHeader xmlns="http://www.url.com/Services/P24ListingService11"
<EMail>ricky@email.net</EMail>
<Password>password</Password>
</CredentialsHeader>
Run Code Online (Sandbox Code Playgroud)
所以我有以下PHP:
$client = new SoapClient("https://exdev.www.example.com/Services/example.asmx?WSDL",
array(
"trace" => 1,
"exceptions" => 0,
"cache_wsdl" => 0,
'soap_version' => SOAP_1_1
)
);
$CredentialObject = new SoapVar(array('EMail' => 'ricky@email.net', 'Password' => 'password'), SOAP_ENC_OBJECT);
Run Code Online (Sandbox Code Playgroud)
哪个产生:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.example.com/Services/Example">
<SOAP-ENV:Header>
<ns1:CredentialsHeader>
<EMail>ricky@email.net</EMail>
<Password>password</Password>
</ns1:CredentialsHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:EchoAuthenticated/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)
我需要做的就是阻止它使用ns1并xmlns在节点中实际定义如下:
<CredentialsHeader xmlns="http://www.example.com/Services/Example">
<EMail>ricky@email.net</EMail>
<Password>password</Password>
</CredentialsHeader>
Run Code Online (Sandbox Code Playgroud)
我已经在Firefox海报中对此进行了测试,并且知道更改可以解决问题.
我试图在PHP中发出SOAP请求.我有我的服务URL,当我在SOAP UI中检查它时,我可以看到以下内容
<application xmlns="http://somenamespace.com">
<doc xml:lang="en" title="https://someurl.com"/>
<resources base="https://someurl.com">
<resource path="sdk/user/session/logon/" id="Logon">
<doc xml:lang="en" title="Logon"/>
<param name="ApiKey" type="xs:string" required="false" default="" style="query" xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
<param name="ApiSecret" type="xs:string" required="false" default="" style="query" xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
<method name="POST" id="Logon">
<doc xml:lang="en" title="Logon"/>
<request>
<param name="method" type="xs:string" required="true" default="" style="query" xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
<representation mediaType="application/json"/>
<representation mediaType="application/xml"/>
<representation mediaType="text/xml"/>
<representation mediaType="application/x-www-form-urlencoded"/>
</request>
<response status="404 500">
<representation mediaType="text/html; charset=utf-8" element="html"/>
</response>
<response status="">
<representation mediaType="application/json"/>
<representation mediaType="application/xml"/>
<representation mediaType="text/xml"/>
<representation mediaType="application/x-www-form-urlencoded"/>
</response>
<response status="500">
<representation mediaType="application/vnd.marg.bcsocial.result-v1.9+json; charset=utf-8" element="log:Fault" xmlns:log="https://someurl.com/sdk/user/session/logon"/>
<representation mediaType="application/vnd.marg.bcsocial.result-v1.9+xml; …Run Code Online (Sandbox Code Playgroud) 我需要使用SOAP从数据库中检索一些数据.我不是一个经验丰富的PHP程序员,这就是我需要一些帮助的原因.提供webservice(WSDL)的公司给了我登录信息和svc和wsdl文件的链接.他们还给了我一个如何连接C#的例子:
var proxy = new ChannelFactory<ServiceReferenceWCF.IWebService2>("custom");
proxy.Credentials.UserName.UserName = login;
proxy.Credentials.UserName.Password = pass;
var result = proxy.CreateChannel();
var logged_in = result.loggedIn();
Run Code Online (Sandbox Code Playgroud)
这是我的PHP代码:
$wsdl_proto = 'https';
$wsdl_host = 'their_wsdl_host';
$wsdl_host_path = 'their_wsdl_path';
$namespace_proto = 'https';
$namespace_host = 'their_namespace_host';
$namespace_path = 'their_namespace_path';
$location = $namespace_proto.'://'.$namespace_host.$namespace_path;
$wsdl_url = $wsdl_proto.'://'.$wsdl_host.$wsdl_host_path;
$connection = new SoapClient($wsdl_url, array('location' => $location, 'soap_version' => SOAP_1_1, 'connection_timeout'=> 600,
'proxy_login' => "my_login", 'proxy_password' => "my_password"));
$functions = $connection->__getFunctions();
var_dump($functions);
$logged_in = $connection->loggedIn();
Run Code Online (Sandbox Code Playgroud)
它在loggedIn()函数调用期间挂起.此函数列在$ functions变量中,因此它是有效的.我尝试了服务提供的其他一些功能 - 结果总是一样的:脚本只是冻结了.我的意思是服务没有响应,PHP等待loggedIn()功能完成.超过超时后,我收到一个错误:Error Fetching …
soap-client ×10
php ×7
soap ×6
wsdl ×2
amazon ×1
c# ×1
javascript ×1
namespaces ×1
node.js ×1
php-5.2 ×1
reactive ×1
spring-boot ×1
ssl ×1
windows-8 ×1
xml ×1