teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

7

追記

2016/03/07 20:27

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -67,4 +67,8 @@
67
67
 
68
68
  # cURLの`CURLOPT_SSL_VERIFYPEER` についての補足画像
69
69
 
70
+ (Noriyuki_sasaさんの回答へのコメント参照)
71
+
70
- ![Chrome](56f583d9d3d86cd14c667ad086f7114f.png)
72
+ ![Chrome](56f583d9d3d86cd14c667ad086f7114f.png)
73
+
74
+ 今回は**HTTP通信は成功している**(少なくとも404というHTTPステータスは返ってきている)ので,TLSが原因のエラーではありません.TLSでエラーが起こった場合,HTTPステータスすら取得出来ません.

6

追記

2016/03/07 20:26

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -4,10 +4,31 @@
4
4
 
5
5
  > 下記のように記述しましたが404エラーが帰ってきてしまいます。
6
6
 
7
- という悩みであれば,`https://www.test.org?wsdl` などとして茶化さずに本物のURLを出すべきです.**404 Not Found は,あなたがURLの一部を間違えていることに起因する可能性が高いです.**
7
+ という悩みであれば,`https://www.test.org?wsdl` などとして茶化さずに本物のURLを出すべきです.**404 Not Found は,あなたがURLまたはパラメータの一部を間違えていることに起因する可能性が高いです.** (また例として用いるドメインには `example.com` を用いるべきです)
8
8
 
9
- (また例とて用いるドメインに `example.com` を用いるべきです)
9
+ 現時点で明らかにおかしいと言え以下の2点です
10
10
 
11
+ 一点目,XML文字列がストリームコンテキストの`header`オプションに指定されています.ここにくるのは`Content-Length: XXX` といったHTTPヘッダのみです.XMLのデータが入ることは基本的にあり得ません.(また`$header`と`$body`も意図に反して入れ替わってしまっているような気がするんですが…)
12
+
13
+ 二点目,XMLの構造がめちゃくちゃです.fagaiさんのリンク先の情報によれば,SOAPリクエストは以下のようなフォーマットをとるはずです.改行区切りで後ろに続いているほうがPOSTされるXMLとなりますが,提示されているXMLはこの形式に従っているように見えません.
14
+
15
+ ```http
16
+ POST /MySERVER/myWSDLservice.asmx HTTP/1.1
17
+ Host: connection.mywebsite.com
18
+ Content-Type: text/xml; charset=utf-8
19
+ Content-Length: length
20
+ SOAPAction: "http://connection.mywebsite.com/MySERVER/GetCarType"
21
+
22
+ <?xml version="1.0" encoding="utf-8"?>
23
+ <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
24
+ <soap:Body>
25
+ <GetCarType xmlns="http://connection.mywebsite.com/MySERVER/">
26
+ <IDNumber>string</IDNumber>
27
+ </GetCarType>
28
+ </soap:Body>
29
+ </soap:Envelope>
30
+ ```
31
+
11
32
  # 蛇足
12
33
 
13
34
  この用途では `SoapClient`が一番使いやすいと思うんですが…

5

SSLについての補足画像を追加

2016/03/07 15:23

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -42,4 +42,8 @@
42
42
  var_dump($e->getMessage());
43
43
 
44
44
  }
45
- ```
45
+ ```
46
+
47
+ # cURLの`CURLOPT_SSL_VERIFYPEER` についての補足画像
48
+
49
+ ![Chrome](56f583d9d3d86cd14c667ad086f7114f.png)

4

書式の改善

2016/03/07 15:02

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -1,4 +1,4 @@
1
- 本題
1
+ # 本題
2
2
 
3
3
  まず
4
4
 
@@ -6,12 +6,10 @@
6
6
 
7
7
  という悩みであれば,`https://www.test.org?wsdl` などとして茶化さずに本物のURLを出すべきです.**404 Not Found は,あなたがURLの一部を間違えていることに起因する可能性が高いです.**
8
8
 
9
- (また例として用いるドメインには `example.com` を用いるべき)
9
+ (また例として用いるドメインには `example.com` を用いるべきです)
10
10
 
11
- ----
11
+ # 蛇足
12
12
 
13
- 【蛇足】
14
-
15
13
  この用途では `SoapClient`が一番使いやすいと思うんですが…
16
14
  XMLを書かずに,あたかも普通のPHPのコードを書いているような気分で書けますよ.
17
15
 
@@ -23,7 +21,7 @@
23
21
  <?php
24
22
  try {
25
23
 
26
- $client = @new \SoapClient('https://www.test.org?wsdl');
24
+ $client = @new \SoapClient('https://example.com/?wsdl');
27
25
  if (!$client) {
28
26
  $error = error_get_last();
29
27
  throw new \Exception($error['message']);

3

書式の改善

2016/03/07 14:54

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -4,8 +4,7 @@
4
4
 
5
5
  > 下記のように記述しましたが404エラーが帰ってきてしまいます。
6
6
 
7
- という悩みであれば,`https://www.test.org?wsdl` などとして茶化さずに本物のURLを出すべきです.
7
+ という悩みであれば,`https://www.test.org?wsdl` などとして茶化さずに本物のURLを出すべきです.**404 Not Found は,あなたがURLの一部を間違えていることに起因する可能性が高いです.**
8
- 404 Not Found は,あなたがURLの一部を間違えていることに起因する可能性が高いです.
9
8
 
10
9
  (また例として用いるドメインには `example.com` を用いるべき)
11
10
 

2

書式の改善

2016/03/07 14:52

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -1,3 +1,18 @@
1
+ 【本題】
2
+
3
+ まず
4
+
5
+ > 下記のように記述しましたが404エラーが帰ってきてしまいます。
6
+
7
+ という悩みであれば,`https://www.test.org?wsdl` などとして茶化さずに本物のURLを出すべきです.
8
+ 404 Not Found は,あなたがURLの一部を間違えていることに起因する可能性が高いです.
9
+
10
+ (また例として用いるドメインには `example.com` を用いるべき)
11
+
12
+ ----
13
+
14
+ 【蛇足】
15
+
1
16
  この用途では `SoapClient`が一番使いやすいと思うんですが…
2
17
  XMLを書かずに,あたかも普通のPHPのコードを書いているような気分で書けますよ.
3
18
 

1

例をわかりやすく

2016/03/07 14:51

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -2,6 +2,7 @@
2
2
  XMLを書かずに,あたかも普通のPHPのコードを書いているような気分で書けますよ.
3
3
 
4
4
  - [PHP Manual - SoapClient](http://php.net/manual/ja/class.soapclient.php)
5
+ - [PHP SOAP Extension in PHP 5.3.1](http://www.herongyang.com/WSDL/PHP-SOAP-Extension-in-PHP-531.html)
5
6
  - [【php】SOAPする at softelメモ](https://www.softel.co.jp/blogs/tech/archives/5129)
6
7
 
7
8
  ```php
@@ -13,7 +14,15 @@
13
14
  $error = error_get_last();
14
15
  throw new \Exception($error['message']);
15
16
  }
17
+ $result = $client->doSomethingAction(
16
- $result = $client->doSomethingAction('This is the value for "param01"');
18
+ 'Hello', // (type: "string"; name: "param0")
19
+ 'World', // (type: "string"; name: "param1")
20
+ new \SoapVar('2016-03-07', XSD_DATE) // (type: "date"; name: "param2")
21
+ new \SoapParam(
22
+ new \SoapVar('2015-12-25', XSD_DATE), // (type: "date")
23
+ "christmas" // (name: "christmas")
24
+ )
25
+ );
17
26
  var_dump($result);
18
27
 
19
28
  } catch (\Exception $e) {