HTTP SOAP java请求中的标头错误无效

时间:2014-02-07 18:23:24

标签: java web-services http soap

我正在尝试连接到此Web服务(CDYNE DelayedStockQuote)以通过Java程序绘制股票市场数据。

他们在该页面上有一个示例SOAP请求,我相信我在我的代码中正确复制。

这是我的代码:

    package stock;

import java.net.*;
import java.io.*;

public class Stock {

public static void main(String args[]) throws Exception {

    String XML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
            + "<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/\">"
            + "  <soap:Body>"
            + "    <GetQuickQuote xmlns=\"http://ws.cdyne.com/\">"
            + "      <StockSymbol>GOOG</StockSymbol>"
            + "      <LicenseKey>0</LicenseKey>"
            + "    </GetQuickQuote>"
            + "  </soap:Body>"
            + "</soap:Envelope>";

    String hostname = "ws.cdyne.com";
    int port = 80;
    InetAddress addr = InetAddress.getByName(hostname);
    System.out.println(addr);
    Socket sock = new Socket(addr, port);

    //Send header
    String path = "/delayedstockquote/delayedstockquote.asmx";
    BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream(), "UTF-8"));
    // You can use "UTF8" for compatibility with the Microsoft virtual machine.
    wr.write("POST " + path + " HTTP/1.1\r\n");
    wr.write("Host: ws.cdyne.com\r\n");
    wr.write("Content-Type: text/xml; charset=utf-8\r\n");
    wr.write("Content-Length: " + XML.length() + "\r\n");
    wr.write("SOAPAction: \"http://ws.cdyne.com/GetQuickQuote\"");
    wr.write("\r\n");

    //Send data
    wr.write(XML);
    wr.flush();

    // Response
    BufferedReader rd = new BufferedReader(new InputStreamReader(sock.getInputStream()));
    String line;
    while ((line = rd.readLine()) != null) {
        System.out.println(line);
    }
    }
}

现在我只是将“GOOG”(谷歌股票代码)硬编码到程序中,并将“0”作为许可证密钥。

但是,当我运行此代码时,我得到了这个错误:

HTTP / 1.1 400错误请求 内容类型:text / html;字符集= US-ASCII 服务器:HTTPAPI / 2.0 日期:2014年2月7日星期五17:51:46 GMT 连接:关闭 内容长度339

这条消息在XML数据中: 错误请求 - 标头无效 HTTP错误400.请求的标头名称无效。

任何人都可以在我的代码中看到一个漏洞吗?让我担心的一件事是API可能会被关闭。做了一些研究后我找到了这个链接: It says that PowerQuote has been disabled

我担心这就是为什么我的请求无效。但我不知道为什么我提供的第一个链接会发回正确/最新的股票信息

有什么想法吗?

编辑: 正如我在评论中提到的,我通过在SOAP标头和XML字符串之间添加一个空行来消除错误的标头错误。但是现在我只是获得一个SOAP响应头,并返回值:

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/xml; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By:  ASP.NET
Date: Fri, 07 Feb 2014 19:14:13 GMT
Content-Length: 372

这是什么意思?!?!

0 个答案:

没有答案