如何使用Java将数据发布到HTTP服务器
在我的Java脚本中,我可以列出我的日历事件:如何使用Java将数据发布到HTTP服务器,java,http,google-calendar-api,Java,Http,Google Calendar Api,在我的Java脚本中,我可以列出我的日历事件: String pageToken = null; do { Events events= null; try { events = service.events().list(CALENDAR_ID).setPageToken(pageToken).execute(); } catch (IOException ex) { Logger.getLogger(CalendarService.cl
String pageToken = null;
do {
Events events= null;
try {
events = service.events().list(CALENDAR_ID).setPageToken(pageToken).execute();
} catch (IOException ex) {
Logger.getLogger(CalendarService.class.getName()).log(Level.SEVERE, null, ex);
}
List<Event> items = events.getItems();
for (Event event : items) {
System.out.println(event.getSummary());
System.out.println(event.getStart());
}
pageToken = events.getNextPageToken();
} while (pageToken != null);
String pageToken=null;
做{
Events=null;
试一试{
events=service.events().list(CALENDAR_ID).setPageToken(pageToken).execute();
}捕获(IOEX异常){
Logger.getLogger(CalendarService.class.getName()).log(Level.SEVERE,null,ex);
}
List items=events.getItems();
用于(事件:项目){
System.out.println(event.getSummary());
System.out.println(event.getStart());
}
pageToken=events.getNextPageToken();
}while(pageToken!=null);
我想知道如何通过http将这些信息发送到服务器?提前谢谢 您需要使用HTTP客户端,例如或 这是一个:
/**
*按顺序执行多个POST请求的基本示例。
*/
公共类ElementalHttpPost{
公共静态void main(字符串[]args)引发异常{
HttpProcessor httpproc=HttpProcessorBuilder.create()
.add(新请求内容())
.add(新的RequestTargetHost())
.add(新的RequestConnControl())
.add(新的RequestUserAgent(“测试/1.1”))
.add(new RequestExpectContinue(true)).build();
HttpRequestExecutor httpexecutor=新的HttpRequestExecutor();
HttpCoreContext coreContext=HttpCoreContext.create();
HttpHost主机=新的HttpHost(“本地主机”,8080);
coreContext.setTargetHost(主机);
DefaultBHttpClientConnection conn=新的DefaultBHttpClientConnection(8*1024);
ConnectionReuseStragey connStrategy=DefaultConnectionReuseStragey.INSTANCE;
试一试{
HttpEntity[]请求主体={
新StringEntity(
“这是第一个测试请求”,
ContentType.create(“text/plain”,Consts.UTF_8)),
新ByteArrayEntity(
“这是第二个测试请求”。getBytes(Consts.UTF_8),
ContentType.APPLICATION_八位组_流),
新输入流(
新ByteArrayInputStream(
“这是第三个测试请求(将分块)”
.getBytes(Consts.UTF_8)),
ContentType.APPLICATION(八位字节流)
};
for(int i=0;i>请求URI:”+Request.getRequestLine().getUri());
预处理(请求、httpproc、coreContext);
HttpResponse response=httpexecutor.execute(请求、连接、核心上下文);
后处理(响应、httpproc、coreContext);
System.out.println(“如果您想向服务器发送数据,最好问另一个问题,例如:“如何使用Java将数据发布到HTTP服务器”。您遇到的问题不一定与google callendar本身有关。@Jaap,但数据的格式(和内容类型)(如果有!)服务器接受的内容因服务器而异,因此服务器确实很重要。它是否使用POST、PUT、GET和/或其他内容也很重要。您也可以使用Java的内置URLConnection
,URL为scheme http:或https:。但您的示例只连接和接收数据,而不发送数据,这就是问题所在。@dave_thompson_085是的,您可以使用脆弱的HttpURLConnection
机制,但是您将缺少超时、重试、连接池等。无论如何,我将编辑我的答案,以便它显示一个POST示例。感谢您指出这一点。
/**
* Elemental example for executing multiple POST requests sequentially.
*/
public class ElementalHttpPost {
public static void main(String[] args) throws Exception {
HttpProcessor httpproc = HttpProcessorBuilder.create()
.add(new RequestContent())
.add(new RequestTargetHost())
.add(new RequestConnControl())
.add(new RequestUserAgent("Test/1.1"))
.add(new RequestExpectContinue(true)).build();
HttpRequestExecutor httpexecutor = new HttpRequestExecutor();
HttpCoreContext coreContext = HttpCoreContext.create();
HttpHost host = new HttpHost("localhost", 8080);
coreContext.setTargetHost(host);
DefaultBHttpClientConnection conn = new DefaultBHttpClientConnection(8 * 1024);
ConnectionReuseStrategy connStrategy = DefaultConnectionReuseStrategy.INSTANCE;
try {
HttpEntity[] requestBodies = {
new StringEntity(
"This is the first test request",
ContentType.create("text/plain", Consts.UTF_8)),
new ByteArrayEntity(
"This is the second test request".getBytes(Consts.UTF_8),
ContentType.APPLICATION_OCTET_STREAM),
new InputStreamEntity(
new ByteArrayInputStream(
"This is the third test request (will be chunked)"
.getBytes(Consts.UTF_8)),
ContentType.APPLICATION_OCTET_STREAM)
};
for (int i = 0; i < requestBodies.length; i++) {
if (!conn.isOpen()) {
Socket socket = new Socket(host.getHostName(), host.getPort());
conn.bind(socket);
}
BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST",
"/servlets-examples/servlet/RequestInfoExample");
request.setEntity(requestBodies[i]);
System.out.println(">> Request URI: " + request.getRequestLine().getUri());
httpexecutor.preProcess(request, httpproc, coreContext);
HttpResponse response = httpexecutor.execute(request, conn, coreContext);
httpexecutor.postProcess(response, httpproc, coreContext);
System.out.println("<< Response: " + response.getStatusLine());
System.out.println(EntityUtils.toString(response.getEntity()));
System.out.println("==============");
if (!connStrategy.keepAlive(response, coreContext)) {
conn.close();
} else {
System.out.println("Connection kept alive...");
}
}
} finally {
conn.close();
}
}
}