百度实时主动推送url

提交方式:

1.百度站长入口 
http://zhanzhang.baidu.com/linksubmit/index 
网站提高了很多站长所需的东西。你一看便知。

2.登录后:网站抓取——>链接提交 
你会发现,百度提供了多种链接提交的方式: 
自动提交: 
主动推送(实时)、自动推送、 sitemap 
手动提交:。

下面主要演示通过java代码进行主动推送。

第一步:主动推送接口

来到主动推送页面,我们可以看到如下页面展示: 

百度实时主动推送url_第1张图片

其中接口调用地址: http://data.zz.baidu.com/urls?site=www.xxxx.com&token=xxxx 
这是我们,推送的入口,很重要,不要告诉别人,避免别人向着瞎推送,因为是有上限的不过足够一个网站使用,当然推送的地址,域名必须为当前网站地址http://www.xxxx.com(注:需进入百度站长平台http://zhanzhang.baidu.com/linksubmit/index获取本网站的token值)

第二步:如何推送

百度站长给出了,相关的使用说明文档 
http://zhanzhang.baidu.com/college/courseinfo?id=267&page=2#h2_article_title14

给出的Post推送示例如下:

2)post推送示例
-------------
POST /urls?site=www.58.com&token=edk7ychrEZP9pDQD HTTP/1.1
User-Agent: curl/7.12.1 
Host: data.zz.baidu.com 
Content-Length: 83
------------------
http://www.example.com/1.html
http://www.example.com/2.html

其中post:对应的推送地址; 
User-Agent:用户带来; 
Host:主机; 
Content-Length内容长度; 
接着是推送的地址

其中User-Agent、Content-Length需要我们在表头继续设置。

第三步:java程序进行推送

方式一:利用Spring RestTemplate进行推送

RestTemplate是Spring提供的用于访问Rest服务的客户端, RestTemplate提供了多种便捷访问远程Http服务的方法,也就是get、post、put、delete等等请求,都能实现,这里不做详细介绍。 
如果你选择这种方式,你得有过java框架相关开发经验,用过spring,其中具体配置就不给出了。 
Maven引入Spring

        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-contextartifactId>
            <version>4.3.5.RELEASEversion>
        dependency>

这样,RestTemplate相关的类库就进来了。 
在Bean中配置RestTemplate

    id="restTemplate" class="org.springframework.web.client.RestTemplate"/>

好了下面在测试类中进行演示

@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class HelloTest {
    @Autowired
    RestTemplate restTemplate;

    @Test
    public void testPush() {
        String api_url = "http://data.zz.baidu.com/urls?site=www.***.com&token=****";
        List urlList = new ArrayList<>();
        urlList.add("http://www.***.com/1");
        urlList.add("http://www.***.com/2");
        urlList.add("http://www.***.com/3");
        StringBuffer urlBuffer = new StringBuffer();
        for (String url : urlList) {
            urlBuffer.append(url + "\n");
        }
        System.out.println(urlBuffer.toString());
        HttpHeaders headers = new HttpHeaders();
        headers.add("Host", "data.zz.baidu.com");
        headers.add("User-Agent", "curl/7.12.1");
        headers.add("Content-Length", "83");
        headers.add("Content-Type", "text/plain");
        HttpEntity entity = new HttpEntity(urlBuffer.toString(), headers);
        String result = restTemplate.postForObject(api_url, entity, String.class);
        System.out.println(result);
    }

}

方式二:使用java自带的HttpClient进行推送

封装的post推送方法:

  public String Post(String PostUrl, String[] Parameters) {
        if (null == PostUrl || null == Parameters || Parameters.length == 0) {
            return null;
        }
        String result = "";
        PrintWriter out = null;
        BufferedReader in = null;
        try {
            //建立URL之间的连接
            URLConnection conn = new URL(PostUrl).openConnection();
            //设置通用的请求属性
            conn.setRequestProperty("Host", "data.zz.baidu.com");
            conn.setRequestProperty("User-Agent", "curl/7.12.1");
            conn.setRequestProperty("Content-Length", "83");
            conn.setRequestProperty("Content-Type", "text/plain");

            //发送POST请求必须设置如下两行
            conn.setDoInput(true);
            conn.setDoOutput(true);

            //获取conn对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            //发送请求参数
            String param = "";
            for (String s : Parameters) {
                param += s + "\n";
            }
            out.print(param.trim());
            //进行输出流的缓冲
            out.flush();
            //通过BufferedReader输入流来读取Url的响应
            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }

        } catch (Exception e) {
            System.out.println("发送post请求出现异常!" + e);
            e.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }

            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return result;
    }

测试

    @Test
    public void testBuidu() {
        String url = "http://data.zz.baidu.com/urls?site=www.xxx.com&token=xxx";//网站的服务器连接
        String[] param = {
                "http://www.xxx.com/detail/1",
                "http://www.xxx.com/detail/2",
                "http://www.xxx.com/detail/3"
        };
        String json = Post(url, param);//执行推送方法
        System.out.println("结果是" + json);  //打印推送结果
    }

第四步:推送结果

运行出现,如果推出成功,将会返回json数据如下:

{
   "remain":4999997,
   "success":3
}

其中remain就是我们上面提到的最多推送链接数。 
如果推送失败,将会以json形式给出推送失败的链接及系相关信息。

后续可在百度站长平台中查看,推送结果。不过有延迟,大概第二天,出统计结果。 
入口同样是:网站抓取——>链接提交


你可能感兴趣的:(百度主动推送)