Hey I am new here in StackOverFlow
Actually I am trying to get data from an official database(https://emf2.bundesnetzagentur.de/karte/Default.aspx). I use java and try to get the information with a post request with parameters. I wrote two different versions, one with the Apache httpclient and one with java.net. I also have a version written in Python(not mine)
The one in java doesn't work! I get at least this error as response:
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;
}
}
BoundingBox:
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;
}
}
Can somebody please help me?
Your code seems to work. I just tried it and only changed the coordinates value provided in your sample with some extracted from my browser debug console and it works:
{"nord":51.7151177895987,"ost":12.70294189453125,"sued":9.857482910156252,"west":50.49770501038011}
My guess is that you should ensure that there is no mistake in your BoundingBox
class and that the range of each coordinate values is appropriate.