简体   繁体   中英

Why do I respond an Internal server error with status code 500 with a java post-request?

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM