java - 如何从外部网站获取 cookie?

标签 java

我正在寻求类似以下问题的帮助:

我有网站 A,我在其上设置了 Cookie。

在同一浏览器中打开网站 B,我尝试使用代码从网站 B 连接到网站 A:

String responseSession = "";

     try {

     URL url = new URL(urlSCS + "session" );
     InputStream response = url.openStream();
     BufferedReader reader = new BufferedReader(new
     InputStreamReader(response, "UTF-8"));


     for(String line; (line = reader.readLine()) != null;){
     responseSession += line;
     }

     }catch(Exception e){
     e.printStackTrace();
     }

     return responseSession;

从网站A获取Cookie。

问题是,当我使用 Cookie 打开站点 A 时,Cookie 显示正确,但是当我尝试通过网站 B 获取 Cookie 时,出现错误:

SEVERE: Servlet.service() for servlet appServlet threw exception
java.lang.NullPointerException
    at com.esb.scs.SessionController.session(SessionController.java:81)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:680)

最佳答案

Cookie 无法在此类网站之间共享。

当您设置cookie时,它是您的浏览器和网站A之间的契约(Contract)。当您的浏览器连接到网站B时,它无法访问网站A的cookie,因为cookie位于您的浏览器上。您无法将此 cookie 传输到网站 B,以便它可以在网站 A 上使用它。这样做是出于安全原因,无法解决。

要将信息从网站 A 传输到网站 B,您应该使用表单 POST 操作从网站 A 到网站 B,并在发布中对所需的数据进行编码。然后网站 B 可以从 POST 操作中读取此信息,而不是尝试从网站 A 上的 cookie 中获取该信息。

关于java - 如何从外部网站获取 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8820033/

相关文章:

java - BigQuery Java API - QueryReponse.getSchema() 给出 null

java - 如何在 clojure 中访问一 jar jar ?

java - 如何将 Retrofit 响应映射到数据模型类?

java - RMI 注册表不可用错误

java - java中for循环迭代器的最大值

java - 渲染不同的VAO

java - 用 Java 实现我自己的树迭代器

java - 服务器返回 Http 响应代码 : 707

java - ProcessBuilder删除并重命名

java - char 和 int 交替字符串