我正在尝试连接到此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
这是什么意思?!?!