如何通过IP地址访问服务


(江南) #1

我们的服务器由于中心设置了加密等策略只能通过IP才能访问出去,请问我们如何通过IP访问以下几个服务:
https://api.jpush.cn/v3/push
https://device.jpush.cn/v3/devices/
https://api.jpush.cn/v3/push/validate

换成IP地址如何访问呢?


#2

(江南) #3

113.31.17.107
113.31.136.60
183.232.57.12

试了这几个IP通过浏览器均不能正常访问,如:
http://113.31.17.107/v3/push
https://113.31.17.107/v3/push

均不能象域名一样正常返回值,请问是如何通过IP进行访问的?


#4

1、搜索IP、域名、Host

2、我们的API都不是直接在浏览器可以访问的,请用crul、postman ,做调用验证,传参后访问


(江南) #5

用域名就能浏览器正常访问啊。用IP就会自动转到极光主页。
比如直接在浏览器输入以下地址是能正常访问的:https://api.jpush.cn/v3/push


(江南) #6

我们现在的情况是之前集成了极光推送,通过域名方式程序运行没问题,现在客户由于华为防火墙原因不能使用域名进行访问,只能通过IP,希望你们能支持一下,提供能使用的IP。


#7

IP就是上面链接里面提供的,你将IP和域名用host绑定?这样做可以吗?


(江南) #8

这几个IP我们试了,都不能正常发送。麻烦看看有什么问题?

       //采用域名发送正常
        //push.sendRequest("POST", "https://api.jpush.cn/v3/push", "21050de9f4eb6bcca9f7912b:9b8f01840d9ae82dc8cf2669", poststr);

        //******采用IP地址发送失败,采用上面域名发送正常。
        push.sendRequest("POST", "https://113.31.136.60/v3/push", "21050de9f4eb6bcca9f7912b:9b8f01840d9ae82dc8cf2669", poststr);

    public object sendRequest(String method, String url, String auth, String reqParams)
    {
        //结果wrap
        //ResponseWrapper result = new ResponseWrapper();
        //创建httprequest
        HttpWebRequest myReq = null;
        //创建httpresponse
        HttpWebResponse response = null;

        string content = string.Empty;
        try
        {
            //利用工厂机制(factory mechanism)通过Create()方法来创建的
            myReq = (HttpWebRequest)WebRequest.Create(url);
            //request类型
            myReq.Method = method;
            myReq.ContentType = "application/json";
            //auth是否为null或者空
            if (!String.IsNullOrEmpty(auth))
            {
                //添加头auth
                myReq.Headers.Add("Authorization", "Basic " + getBase64Encode(auth));
            }
            if (method == "POST")
            {
                //utf8编码
                byte[] bs = UTF8Encoding.UTF8.GetBytes(reqParams);
                myReq.ContentLength = bs.Length;
                using (Stream reqStream = myReq.GetRequestStream())
                {
                    reqStream.Write(bs, 0, bs.Length);
                    reqStream.Close();
                }
            }

            if (method == "PUT")
            {
                //utf8编码
                byte[] bs = UTF8Encoding.UTF8.GetBytes(reqParams);
                myReq.ContentLength = bs.Length;
                using (Stream reqStream = myReq.GetRequestStream())
                {
                    reqStream.Write(bs, 0, bs.Length);
                    reqStream.Close();
                }
            }

            //response
            response = (HttpWebResponse)myReq.GetResponse();
            //http status code
            HttpStatusCode statusCode = response.StatusCode;
            //result.responseCode = statusCode;
            if (Equals(response.StatusCode, HttpStatusCode.OK))
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8))
                {
                    content = reader.ReadToEnd();
                    //result.responseContent = reader.ReadToEnd();
                }
                //String limitQuota = response.GetResponseHeader(RATE_LIMIT_QUOTA);
                //String limitRemaining = response.GetResponseHeader(RATE_LIMIT_Remaining);
                //String limitReset = response.GetResponseHeader(RATE_LIMIT_Reset);
                //result.setRateLimit(limitQuota, limitRemaining, limitReset);
                //Console.WriteLine("Succeed to get response - 200 OK" + " " + DateTime.Now);
                //Console.WriteLine("Response Content - {0}", result.responseContent + " " + DateTime.Now);
            }
        }
        //异常处理
        catch (WebException e)
        {
            Console.WriteLine(e.Message);
            //if (e.Status == WebExceptionStatus.ProtocolError)
            //{
            //    HttpStatusCode errorCode = ((HttpWebResponse)e.Response).StatusCode;
            //    string statusDescription = ((HttpWebResponse)e.Response).StatusDescription;
            //    using (StreamReader sr = new StreamReader(((HttpWebResponse)e.Response).GetResponseStream(), System.Text.Encoding.UTF8))
            //    {
            //        result.responseContent = sr.ReadToEnd();
            //    }
            //    result.responseCode = errorCode;
            //    result.exceptionString = e.Message;
            //    String limitQuota = ((HttpWebResponse)e.Response).GetResponseHeader(RATE_LIMIT_QUOTA);
            //    String limitRemaining = ((HttpWebResponse)e.Response).GetResponseHeader(RATE_LIMIT_Remaining);
            //    String limitReset = ((HttpWebResponse)e.Response).GetResponseHeader(RATE_LIMIT_Reset);
            //    result.setRateLimit(limitQuota, limitRemaining, limitReset);
            //    Debug.Print(e.Message);
            //    result.setErrorObject();
            //    Console.WriteLine(string.Format("fail  to get response - {0}", errorCode) + " " + DateTime.Now);
            //    Console.WriteLine(string.Format("Response Content - {0}", result.responseContent) + " " + DateTime.Now);

            //    throw e;
            //}
            //else
            //{//
            //    throw e;
            //}
        }
        //这里不再抓取非http的异常,如果异常抛出交给开发者自行处理
        //catch (System.Exception ex)
        //{
        //     String errorMsg = ex.Message;
        //     Debug.Print(errorMsg);
        //}
        finally
        {
            if (response != null)
            {
                response.Close();
            }
            if (myReq != null)
            {
                myReq.Abort();
            }
        }
        return content;
    }

(江南) #9

其实我们就是想通过IP方式发送推送消息。
你们现在提供的三个IP,均不能正常接收推送,我想问一下,是否是需要加端口,还是需要其它什么配置?或许连接方式不同?

        //采用域名发送正常
        //push.sendRequest("POST", "**https://api.jpush.cn/v3/push**", "21050de9f4eb6bcca9f7912b:9b8f01840d9ae82dc8cf2669", poststr);

        //******采用IP地址发送失败
        push.sendRequest("POST", "**https://113.31.136.60/v3/push**", "21050de9f4eb6bcca9f7912b:9b8f01840d9ae82dc8cf2669", poststr);

#10

只能使用域名访问,不存在用IP访问这种方式!就是你上面这样改的是不对的!

1、你们如果能开通443、80端口,那么就直接可以用 域名访问了

2、对我上面提供的三个IP开通防火墙白名单,即可用域名访问

3、你可以在host文件里面 对域名和IP进行绑定,实现固定IP访问,但请求的时候还是写的域名,具体方法请百度


(爱娜 Forever) #11

目前是这种情况,服务器是内网环境的,网络策略只能做到开放一些IP进行外网访问,如果只把上面3个IP开放 是否可以通过域名正常访问?