想要编写一个程序使用post方法将要查询的结果以及查询图片的初始序号,传递给
google图片搜索,但是建立连接后程序无法实现post,显示如下出错信息:F:\WorkPlace>javac URLConnectionTest.javaF:\WorkPlace>java URLConnectionTest
null: HTTP/1.1 200 OK
Transfer-Encoding: chunked
Date: Thu, 15 Mar 2007 11:41:56 GMT
Set-Cookie: PREF=ID=160fac079b38626a:NW=1:TM=1173958916:LM=1173958916:S=-
eEV0lnw
Content-Type: text/html; charset=ISO-8859-1
Server: GWS/2.1
Cache-Control: private
----------
getContentType: text/html; charset=ISO-8859-1
getContentLength: -1
getContentEncoding: null
getDate: 1173958916000
getExpiration: 0
getLastModifed: 0
----------
Exception in thread "main" java.lang.IllegalStateException: Already connected
at java.net.URLConnection.setDoOutput(URLConnection.java:849)
at URLConnectionTest.main(URLConnectionTest.java:66)
百思不得其解,求教大家,谢谢!程序如下:
import java.io.*;
import java.net.*;
import java.util.*;public class URLConnectionTest
{
public static void main(String[] args)
{
try
{
String urlName;
if (args.length > 0)
urlName = args[0];
else
urlName = "http://images.google.com/ ;
String query,start;
if (args.length > 1)
query = args[1];
else
query = "human+face";
if (args.length > 2)
start = args[2];
else
start = "0"; URL url = new URL(urlName);
URLConnection connection = url.openConnection(); connection.connect(); // print header fields Map<String, List<String>> headers = connection.getHeaderFields();
for (Map.Entry<String, List<String>> entry : headers.entrySet())
{
String key = entry.getKey();
for (String value : entry.getValue())
System.out.println(key + ": " + value);
} // print convenience functions System.out.println("----------");
System.out.println("getContentType: " + connection.getContentType());
System.out.println("getContentLength: " + connection.getContentLength
());
System.out.println("getContentEncoding: " +
connection.getContentEncoding());
System.out.println("getDate: " + connection.getDate());
System.out.println("getExpiration: " + connection.getExpiration());
System.out.println("getLastModifed: " + connection.getLastModified());
System.out.println("----------");
connection.setDoOutput(true);
StringBuffer send = new StringBuffer();
send.append("images?");
send.append('&');
send.append('q');
send.append('=');
send.append(URLEncoder.encode(query,"UTF-8"));
send.append('&');
send.append("start");
send.append('=');
send.append(URLEncoder.encode(start,"UTF-8"));
OutputStreamWriter out = new OutputStreamWriter
(connection.getOutputStream(),"ASCII");
out.write(send.toString());
out.write("\r\n");
out.flush();
out.close();
Scanner in = new Scanner(connection.getInputStream()); // print contents while(in.hasNextLine()){
System.out.println(in.nextLine());
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
google图片搜索,但是建立连接后程序无法实现post,显示如下出错信息:F:\WorkPlace>javac URLConnectionTest.javaF:\WorkPlace>java URLConnectionTest
null: HTTP/1.1 200 OK
Transfer-Encoding: chunked
Date: Thu, 15 Mar 2007 11:41:56 GMT
Set-Cookie: PREF=ID=160fac079b38626a:NW=1:TM=1173958916:LM=1173958916:S=-
eEV0lnw
Content-Type: text/html; charset=ISO-8859-1
Server: GWS/2.1
Cache-Control: private
----------
getContentType: text/html; charset=ISO-8859-1
getContentLength: -1
getContentEncoding: null
getDate: 1173958916000
getExpiration: 0
getLastModifed: 0
----------
Exception in thread "main" java.lang.IllegalStateException: Already connected
at java.net.URLConnection.setDoOutput(URLConnection.java:849)
at URLConnectionTest.main(URLConnectionTest.java:66)
百思不得其解,求教大家,谢谢!程序如下:
import java.io.*;
import java.net.*;
import java.util.*;public class URLConnectionTest
{
public static void main(String[] args)
{
try
{
String urlName;
if (args.length > 0)
urlName = args[0];
else
urlName = "http://images.google.com/ ;
String query,start;
if (args.length > 1)
query = args[1];
else
query = "human+face";
if (args.length > 2)
start = args[2];
else
start = "0"; URL url = new URL(urlName);
URLConnection connection = url.openConnection(); connection.connect(); // print header fields Map<String, List<String>> headers = connection.getHeaderFields();
for (Map.Entry<String, List<String>> entry : headers.entrySet())
{
String key = entry.getKey();
for (String value : entry.getValue())
System.out.println(key + ": " + value);
} // print convenience functions System.out.println("----------");
System.out.println("getContentType: " + connection.getContentType());
System.out.println("getContentLength: " + connection.getContentLength
());
System.out.println("getContentEncoding: " +
connection.getContentEncoding());
System.out.println("getDate: " + connection.getDate());
System.out.println("getExpiration: " + connection.getExpiration());
System.out.println("getLastModifed: " + connection.getLastModified());
System.out.println("----------");
connection.setDoOutput(true);
StringBuffer send = new StringBuffer();
send.append("images?");
send.append('&');
send.append('q');
send.append('=');
send.append(URLEncoder.encode(query,"UTF-8"));
send.append('&');
send.append("start");
send.append('=');
send.append(URLEncoder.encode(start,"UTF-8"));
OutputStreamWriter out = new OutputStreamWriter
(connection.getOutputStream(),"ASCII");
out.write(send.toString());
out.write("\r\n");
out.flush();
out.close();
Scanner in = new Scanner(connection.getInputStream()); // print contents while(in.hasNextLine()){
System.out.println(in.nextLine());
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
URLConnection connection = url.openConnection();但是修改后又出现了新的错误:F:\WorkPlace>javac URLConnectionTest.javaF:\WorkPlace>java URLConnectionTest
java.io.IOException: Server returned HTTP response code: 501 for URL: http://ima
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLCon
at URLConnectionTest.main(URLConnectionTest.java:74)
import java.io.*;
import java.net.*;
import java.util.*;public class URLConnectionTest
{
public static void main(String[] args)
{
try
{
String urlName;
if (args.length > 0)
urlName = args[0];
else
urlName = "http://images.google.com/";
String query,start;
if (args.length > 1)
query = args[1];
else
query = "human+face";
if (args.length > 2)
start = args[2];
else
start = "0"; URL url = new URL(urlName);
URLConnection connection = url.openConnection(); connection.setDoOutput(true);
StringBuffer send = new StringBuffer();
send.append("images?");
send.append('&');
send.append('q');
send.append('=');
send.append(URLEncoder.encode(query,"UTF-8"));
send.append('&');
send.append("start");
send.append('=');
send.append(URLEncoder.encode(start,"UTF-8"));
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(),"ASCII");
out.write(send.toString());
out.write("\r\n");
out.flush();
out.close();
InputStream in = connection.getInputStream();
InputStreamReader read = new InputStreamReader(in); // print contents int c;
while((c = read.read()) != -1){
System.out.print((char) c);
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
我觉得很费解,因为我最初的想法是,我最初连接对象是“image.google.com”,然后我只
要用post在后面加上“images?&q=human+face&start=0”,它就应该像回应浏览器(如IE)
那样回应我,这样我就可以得到我想要的信息了,我的想法究竟错在什么地方呢?希望大家
指正,谢谢!
网站,但是google不行,也就是google的返回结果我无法接受,请教高手应该如何接收呢?
十分感谢!