gpt4 book ai didi

java - 为什么我使用 java post-request 来响应状态代码 500 的内部服务器错误?

转载 作者:行者123 更新时间:2023-12-01 23:11:41 26 4
gpt4 key购买 nike

嘿,我是 StackOverFlow 的新人

实际上我正在尝试从官方数据库( https://emf2.bundesnetzagentur.de/karte/Default.aspx )获取数据。我使用java并尝试通过带有参数的post请求获取信息。我编写了两个不同的版本,一种使用 Apache httpclient,另一种使用 java.net。我还有一个用 Python 编写的版本(不是我的)

java中的不行!我至少收到此错误作为响应:

Statuscode: 500 Internal Server Error
{"d":{"Message":"Fehler bei der Suche nach Funkanlagenstandorten.","StackTrace":"","Source":"","InnerException":""}}


System.InvalidOperationException: 'GetStandorteFreigabe' ist kein gültiger Webdienst-Methodenname. bei System.Web.Services.Protocols.HttpServerProtocol.Initialize() bei System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.HttpClientBuilder;
import org.json.simple.JSONObject;

import objects.BoundingBox;
import objects.Header;

public class HttpClientTest
{
// TODO Größe der Bounding Box?
public static void main(String[] args)
{
try
{
new HttpClientTest();
}
catch (IOException e)
{
e.printStackTrace();
}
}

Header header;

@SuppressWarnings("unchecked")
public HttpClientTest() throws ClientProtocolException, IOException
{
List<BoundingBox> boxes = getBboxes();
for (BoundingBox bBox : boxes)
{
HttpClient client = null;
CookieStore cookieStore = new BasicCookieStore();
HttpClientBuilder builder = HttpClientBuilder.create().setDefaultCookieStore(cookieStore);
client = builder.build();

String cookie = getCookie();
HttpPost postRequest = new HttpPost(
"https://" + Start.EMF + ".bundesnetzagentur.de/karte/Standortservice.asmx/GetStandorteFreigabe");
header = new Header().getDefaultHeader();
header.add("Cookie", cookie);
Set<String> entries = header.keySet();
for (String key : entries)
postRequest.addHeader(key, header.get(key));

// Request parameters and other properties.
JSONObject obj = new JSONObject();
JSONObject subObj = new JSONObject();
subObj.put("sued", bBox.getSouth());
subObj.put("west", bBox.getWest());
subObj.put("nord", bBox.getNorth());
subObj.put("ost", bBox.getEast());
obj.put("Box", subObj);
System.out.println("RequestJSON: " + obj.toJSONString());

StringEntity requestEntity = new StringEntity(obj.toJSONString());
requestEntity.setContentEncoding("UTF-8");
requestEntity.setContentType("application/json");
postRequest.setEntity(requestEntity);

// Execute and get the response.
HttpResponse response = client.execute(postRequest);
System.out.println(response.getStatusLine());
System.out.println(Arrays.deepToString(response.getAllHeaders()));

HttpEntity entity = response.getEntity();
if (entity != null)
{
StringBuilder sb = new StringBuilder();
try (InputStream instream = entity.getContent())
{
BufferedReader reader = new BufferedReader(new InputStreamReader(instream));
for (String line; (line = reader.readLine()) != null;)
{
sb.append(line + "\r\n");
}

reader.close();
// do something useful
}
System.out.println(sb.toString());
}
}

}

private String getCookie()
{
StringBuilder cookieStringBuilder = new StringBuilder();
try
{
HttpClient client = null;
CookieStore cookieStore = new BasicCookieStore();
HttpClientBuilder builder = HttpClientBuilder.create().setDefaultCookieStore(cookieStore);
client = builder.build();
HttpGet httpGet = new HttpGet("https://" + Start.EMF + ".bundesnetzagentur.de/karte/Default.aspx");
client.execute(httpGet);
cookieStore.getCookies().forEach(e ->
{
cookieStringBuilder.append(e.getName() + " = " + e.getValue());
cookieStringBuilder.append(";");
});

}
catch (IOException e1)
{
e1.printStackTrace();
}

System.out.println("Cookie: " + cookieStringBuilder.toString());
return cookieStringBuilder.toString();
}

private List<BoundingBox> getBboxes()
{
// BoundingBox box = new BoundingBox();
BoundingBox box = new BoundingBox(13.679351806640627, 51.06313741319562, 13.723812103271484,
51.082174834773625);
List<BoundingBox> bBoxes = new ArrayList<>();
bBoxes.add(box);
// double south, west, north, east;
// south = box.getSouth();
//
// while (south <= box.getNorth())
// {
// north = south + JavaDefaultTest.STEP;
// west = box.getWest();
// while (west <= box.getEast())
// {
// east = west + JavaDefaultTest.STEP;
// bBoxes.add(new BoundingBox(west, south, east, north));
// west += JavaDefaultTest.STEP;
// }
// south += JavaDefaultTest.STEP;
// }
return bBoxes;
}
}

边界框:

package objects;

import java.util.ArrayList;
import java.util.List;

/**
* order: west, south, east, north
*
* @author Zinke
*
*/
public class BoundingBox
{
public final static double STEP = 0.03d;
private double north;
private double east;
private double west;
private double south;

private static final double northMin = 47.0f, northMax = 55.0f;
private static final double eastMin = 5.0f, eastMax = 16.0f;

/**
* <b>Initial constructor</b><br>
* <br>
* Bounding box for data scraping: Germany<br>
* coordiantes in decimal degree<br>
* <br>
* order: west, south, east, north
*/
public BoundingBox()
{
setWest(eastMin);
setSouth(northMin);
setEast(eastMin + STEP);
setNorth(northMin + STEP);
}

/**
* Bounding box for data scraping: Germany<br>
* coordiantes in decimal degree<br>
* order: west, south, east, north
*
* @param west
* @param south
* @param east
* @param north
*/
public BoundingBox(double north, double east,double south,double west)
{
setWest(west);
setNorth(north);
setEast(east);
setSouth(south);
}

public double getNorth()
{
return north;
}

public void setNorth(double north)
{
this.north = north;
}

public double getEast()
{
return east;
}

public void setEast(double east)
{
this.east = east;
}

public double getWest()
{
return west;
}

public void setWest(double west)
{
this.west = west;
}

public double getSouth()
{
return south;
}

public void setSouth(double south)
{
this.south = south;
}

/**
* Returns a list with bounding boxes for whole germany <br>
* From Southest+Westest Point beginning
*
* @return
*/
public static List<BoundingBox> getAllBboxes()
{
BoundingBox box = new BoundingBox();
List<BoundingBox> bBoxes = new ArrayList<>();
bBoxes.add(box);// set Starting Box

double south, west, north, east;
south = box.getSouth();
while (south <= northMax)
{
north = south + BoundingBox.STEP;
west = box.getWest();
while (west <= eastMax)
{
east = west + BoundingBox.STEP;
bBoxes.add(new BoundingBox(north,east,south,west));
west += BoundingBox.STEP;
}
south += BoundingBox.STEP;
}
return bBoxes;
}
}

有人可以帮我吗?

最佳答案

你的代码似乎可以工作。我刚刚尝试过,仅更改了示例中提供的坐标值,并从我的浏览器调试控制台中提取了一些坐标值,并且它有效:

{"nord":51.7151177895987,"ost":12.70294189453125,"sued":9.857482910156252,"west":50.49770501038011}

我的猜测是,您应该确保您的 BoundingBox 类中没有错误,并且每个坐标值的范围是合适的。

关于java - 为什么我使用 java post-request 来响应状态代码 500 的内部服务器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58373814/

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