JAVA编程利用Object getContent()方法获得某一URL地址(如新浪,搜狐,网易

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA编程利用Object getContent()方法获得某一URL地址(如新浪,搜狐,网易相关的知识,希望对你有一定的参考价值。

JAVA编程利用Object getContent()方法获得某一URL地址(如新浪,搜狐,网易等)下的内容的程序段。

参考技术A         String res = "";
HttpURLConnection urlconnection = null;
        URL urlcon = new URL(url);
        // 打开连接
        urlconnection = (HttpURLConnection) urlcon.openConnection();
        // 配置连接的请求的内容
        urlconnection.setRequestProperty("Content-Type", contentType);
        // 打开读写属性,默认均为false
        urlconnection.setDoOutput(true);
        urlconnection.setDoInput(true);
        // 设置请求方式,默认为GET 
        urlconnection.setRequestMethod(requestMethod);
        // Post 请求不使用缓存
        urlconnection.setUseCaches(false);
        //设置连接主机超时(单位:毫秒)
        urlconnection.setConnectTimeout(timeOut);
        // 打开请求连接
        urlconnection.connect();
        
        BufferedReader in = null;
        try
        
            in = new BufferedReader(new InputStreamReader(urlconnection.getInputStream()));
            String inputLine = null;
            while ( (inputLine = in.readLine()) != null)
            
             res += inputLine;
            
            res = res.trim();
            in.close();
        
        finally
        
            if (in != null)
            
                in.close();
            
            urlconnection.disconnect();
        

    return res;

Zend_Mail generateMessage() 导致致命错误:在非对象上调用成员函数 getContent()

【中文标题】Zend_Mail generateMessage() 导致致命错误:在非对象上调用成员函数 getContent()【英文标题】:Zend_Mail generateMessage() causes Fatal error: Call to a member function getContent() on a non-object 【发布时间】:2013-03-08 02:31:50 【问题描述】:

我正在使用Zend_Mail_Transport_Smtp 发送电子邮件。发送部分工作正常,但是,我正在努力尝试将电子邮件复制到发送电子邮件帐户的“已发送”文件夹。从 Zend_Mail 生成消息时,我不断收到Call to a member function getContent() on a non-object.

这是我正在做的事情:

$config = array(
            'auth' => 'login',
            'username' => $from,
            'password' => $password);

$transport = new Zend_Mail_Transport_Smtp('smtp.123-reg.co.uk', $config);
Zend_Mail::setDefaultTransport($transport);
$mail = new Zend_Mail('utf-8');

$mail->addTo('foo@bar.com');
$mail->setSubject('Test');
$mail->setFrom('baz@bar.com', 'Baz');
$mail->setBodyText('This is the email');

$mail->send();

**$message = $mail->generateMessage(); <----- here is the problem**

*This is where I would append the message to the sent folder.*
$mail = new Zend_Mail_Storage_Imap
            array('host' => 'imap.123-reg.co.uk',
            'user' => 'baz@bar.com',
            'password' => 'p'
        ));
$mail->appendMessage($message,'Sent');

我不确定我是否遗漏了任何内容或完全错误地执行此操作。任何帮助都会很棒。

【问题讨论】:

在您的代码中看不到 getContent() 方法,这就是您的问题所在。 $obj-&gt;getContent()$obj 之类的东西无论出于何种原因都不是对象。 getContent() 的异常在 Zend_Mime_Message.php(包含在 Zend_Mail.php 中)中被抛出。似乎当我创建和发送 Zend_Mail 消息时,Zend_Mail 实际上并没有创建 mime 部分。在 $mail->send(); 之后当我调用 '$mail->getPartCount()' 时,它返回 0。 ***.com/questions/10853413/… 也没有回答这个问题。无论如何,我可以将电子邮件部分作为字符串获取吗? 这甚至还有一个开放的错误。查看 Zend_Mail,您希望使用 generateMessage() 获得的任何内容都必须首先添加 addPart() 作为 Zend_Mime_Part 对象。唯一的例外是附件。看不出这一切背后的原因。 好的,我找到了解决问题的方法。我的解决方案可能不是最优雅的,但至少是它的工作解决方案。我最终使用了 Swift Mailer——它在发送电子邮件方面非常优雅(它只处理发送电子邮件——而不是 IMAP 的东西)。一旦你使用 swift 创建了一条消息——调用 toString() 方法——那么你就可以使用 Zend_mail 的 appendMessage()。我从 rixtsa 在php.net/manual/en/function.imap-append.php 的帖子中得到了解决方案。也许ZF2没有这个问题,但是如果你在ZF1上你可以使用这个方法。 【参考方案1】:

好的,我找到了解决问题的方法。 Zend_mail 是错误的/不完整的,因为它实际上并没有从 Zend_mail 对象创建一个字符串(至少在 ZF1 中是这样)。

我的解决方案可能不是最优雅的,但至少是可行的解决方案。我最终使用了 Swift Mailer——它在发送电子邮件方面非常优雅(它只处理发送电子邮件——而不是 IMAP 的东西)。一旦你使用 swift 创建了一条消息——调用 toString() 方法——那么你就可以使用 Zend_mail 的 appendMessage()。我从 rixtsa 在http://php.net/manual/en/function.imap-append.php 的帖子中得到了解决方案。也许ZF2没有这个问题,但是如果你在ZF1上你可以使用这个方法。

 // create the message
        $message = Swift_Message::newInstance()
                ->setSubject('The subject')
                ->setFrom(array('a@b.com'=> 'Alfa Beta'))
                ->setTo(array('recipient1@r.com','recipient2@r.com'))
                ->setBody('The body is here= could be')
                ->addPart('<q>If you want html body use this method/q>', 'text/html')
        ;
   //send the message
        $transport = Swift_SmtpTransport::newInstance('smtp.123-reg.co.uk', 25)
                ->setUsername($user)
                ->setPassword($password)
        ;
    $mailer = Swift_Mailer::newInstance($transport);
    $result = $mailer->send($message);

   // generate the string from the message
   $msg = $message->toString();

   // use the string with Zend_Mail_Storage_Imap's appendMessage()
   $mail = new Zend_Mail_Storage_Imap(
                    array('host' => 'imap.123-reg.co.uk',
                        'user' => $user,
                        'password' => $password
            ));
    $mail->selectFolder('Sent');
    $mail->appendMessage($msg);

我希望有人能找到更好、更优雅的解决方案——甚至更好——解决这个错误。但就目前而言,经过大量阅读和搜索,我最终使用 Swift Mailer 来弥补差距。

【讨论】:

【参考方案2】:

您可以自己构建消息字符串

//...send the e-mail, then copy it on Sent folder using this code:
$mail = new Zend_Mail_Storage_Imap(array(
        'host'     => 'imap.123-reg.co.uk',
        'user'     => 'baz@bar.com',
        'password' => 'p'
));
$mail->appendMessage($transport->header . Zend_Mime::LINEEND . $transport->body,'Sent');

【讨论】:

以上是关于JAVA编程利用Object getContent()方法获得某一URL地址(如新浪,搜狐,网易的主要内容,如果未能解决你的问题,请参考以下文章

在Java中怎么实现将界面分成9块,在其中一块随机生成数字

java问题

Java泛型深入理解

如何在 ADF 12c 中重新加载列表资源包

Symfony $request->getContent() 格式错误?

五java面向对象编程_3