gpt4 book ai didi

java - 在 Java 程序中使用 curl

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:12:47 24 4
gpt4 key购买 nike

对于一项作业,我必须创建一个使用 rest 的程序。这是老师给我的代码,让我们开始这项作业,所以下面的代码应该是正确的。

import java.io.*;
import java.net.InetSocketAddress;
import java.util.*;
import java.util.concurrent.Executors;

import com.sun.net.httpserver.*;

public class HttpServerDemo {
public static void main(String[] args) throws IOException {
InetSocketAddress addr = new InetSocketAddress(8080);
HttpServer server = HttpServer.create(addr, 0);
server.createContext( "/", new RootHandler());
server.createContext( "/foo/", new FooHandler());
server.setExecutor( Executors.newCachedThreadPool());
server.start();
System.out.println("Server is listening on port 8080" );
}

public static void printHeaders( HttpExchange exchange, PrintStream response) {
Headers requestHeaders = exchange.getRequestHeaders();
Set<String> keySet = requestHeaders.keySet();
Iterator<String> iter = keySet.iterator();
while( iter.hasNext()) {
String key = iter.next();
response.println( key + " = " + requestHeaders.get(key));
}
}
public static void printBody( HttpExchange exchange, PrintStream response) throws IOException {
BufferedReader body = new BufferedReader( new InputStreamReader( exchange.getRequestBody()));
String bodyLine;
while( (bodyLine = body.readLine()) != null) {
response.println( bodyLine);
}
}
}

class RootHandler implements HttpHandler {
public void handle( HttpExchange exchange) throws IOException {
String requestMethod = exchange.getRequestMethod();

Headers responseHeaders = exchange.getResponseHeaders();
responseHeaders.set( "Content-Type", "text/plain");
exchange.sendResponseHeaders( 200, 0);

PrintStream response = new PrintStream( exchange.getResponseBody());
response.println( "context: ROOT; method: " + requestMethod);
response.println( "--- headers ---");
HttpServerDemo.printHeaders( exchange, response);
if( requestMethod.equalsIgnoreCase( "POST")) {
response.println( "=== body ===");
HttpServerDemo.printBody( exchange, response);
}
response.close();
}
}

class FooHandler implements HttpHandler {
public void handle( HttpExchange exchange) throws IOException {
String requestMethod = exchange.getRequestMethod();

Headers responseHeaders = exchange.getResponseHeaders();
responseHeaders.set( "Content-Type", "text/plain");
exchange.sendResponseHeaders( 200, 0);

PrintStream response = new PrintStream( exchange.getResponseBody());
response.println( "context: FOO; method: " + requestMethod);
HttpServerDemo.printHeaders( exchange, response);
response.close();
}
}

由于 RootHandler 类有一个检查“POST”的 if 语句,我将使用它来测试它。所以当我从一个单独的终端使用 curl 与这个程序通信时,我输入:

curl –d "message=helloworld" http://localhost:8080/

我得到这个作为返回:

curl: (6) Could not resolve host: –d; nodename nor servname provided, or not known
curl: (6) Could not resolve host: message=helloworld; nodename nor servname provided, or not known
context: ROOT; method: GET
--- headers ---
Host = [localhost:8080]
User-agent = [curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5]
Accept = [*/*]

当我从我的终端使用 curl 时,我觉得我犯了错误。通过查看错误,它没有采用我提供的“-d”选项,它导致程序将请求方法读取为“GET”而不是“POST”。我对“DELETE”和“PUT”请求方法进行了尝试,得到了相同的结果。

最佳答案

这不是破折号:

curl –d "message=helloworld" http://localhost:8080/ # Not a dash
curl -d "message=helloworld" http://localhost:8080/ # Is a dash

应该清楚代码是完全不相关的,因为您得到的错误来自 curl

虽然代码应该是正确的,但这并不意味着它。不要仅仅因为你从老师、书本、网站等那里得到它就相信它。各种各样的事情都可能出错,比如剪切和粘贴问题,这很可能是你的 curl 还有命令。

关于java - 在 Java 程序中使用 curl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11601376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com